Ошибка движка Django MongoDB при запуске telliteid - PullRequest
6 голосов
/ 11 января 2012

Так что я создал проект и приложение django в соответствии с руководством, и у меня есть все необходимые зависимости для MongoDB Engine, все это работало нормально, пока я не попытался включить интерфейс администратора.

Я не прокомментировалтребуемые биты и добавили «django_mongodb_engine» и «djangotoolbox» в раздел приложений в settings.py

Когда я пытаюсь войти в localhost: 8000 / admin, я получаю ошибку:

"Значения AutoField (первичный ключ по умолчанию) должны быть строками, представляющими ObjectId в MongoDB (вместо этого получено значение u'1 '). Убедитесь, что ваш SITE_ID содержит допустимую строку ObjectId. "

После некоторого поиска в Google, очевидно, мне нужно запуститьmanage.py telliteid, и мне будет показан идентификатор, который я могу использовать в файле settings.py, чтобы ошибка исчезла, но при попытке запустить manage.py telliteid я получаю:

Traceback (most recent call last):
File "./manage.py", line 14, in <module>
execute_manager(settings)
File "/Users/holografix/.virtualenvs/django_nonrel_env/lib/python2.7/site-   packages/django/core/management/__init__.py", line 438, in execute_manager    utility.execute()
File "/Users/holografix/.virtualenvs/django_nonrel_env/lib/python2.7/site-packages/django/core/management/__init__.py", line 379, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/holografix/.virtualenvs/django_nonrel_env/lib/python2.7/site-packages/django/core/management/base.py", line 191, in run_from_argv
self.execute(*args, **options.__dict__)
File "/Users/holografix/.virtualenvs/django_nonrel_env/lib/python2.7/site-packages/django/core/management/base.py", line 220, in execute
output = self.handle(*args, **options)
File "/Users/holografix/.virtualenvs/django_nonrel_env/lib/python2.7/site-packages/django/core/management/base.py", line 351, in handle
return self.handle_noargs(**options)
File "/Users/holografix/.virtualenvs/django_nonrel_env/lib/python2.7/site-packages/django_mongodb_engine/management/commands/tellsiteid.py", line 8, in handle_noargs
site_id = self._get_site_id()
File "/Users/holografix/.virtualenvs/django_nonrel_env/lib/python2.7/site-packages/django_mongodb_engine/management/commands/tellsiteid.py", line 19, in _get_site_id
return Site.objects.get().id
File "/Users/holografix/.virtualenvs/django_nonrel_env/lib/python2.7/site-packages/django/db/models/manager.py", line 132, in get
return self.get_query_set().get(*args, **kwargs)
File "/Users/holografix/.virtualenvs/django_nonrel_env/lib/python2.7/site-packages/django/db/models/query.py", line 351, in get
% self.model._meta.object_name)
django.contrib.sites.models.DoesNotExist: Site matching query does not exist.

Ответы [ 9 ]

12 голосов
/ 20 марта 2012

Вы можете создать свой сайт, а затем получить идентификатор:

python ./manage.py shell

>>> from django.contrib.sites.models import Site
>>> s = Site()
>>> s.save()

, а затем:

python ./manage.py tellsiteid
12 голосов
/ 22 января 2013

Если вам не нужна функциональность sites (что весьма вероятно), просто выключите приложение django.contrib.sites, и это исправит проблемы MongoDB, связанные с SITE_ID:

INSTALLED_APPS = (   
    (...)
    # 'django.contrib.sites',  # Comment this out
    (...)
)
5 голосов
/ 11 января 2012

Вы еще не создали ни одного сайта. Запустите manage.py syncdb, чтобы создать его.

3 голосов
/ 22 октября 2013

По какой-то причине ни одно из решений здесь не сработало для меня. python ./manage.py tellsiteid, коллекции django_site не было, а комментирование 'django.contrib.sites' вызвало странные ошибки.

Получение идентификатора из оболочки работает для меня, хотя, подробно здесь:

https://gist.github.com/ielshareef/2986459 или здесь Запрос соответствия сайта не существует

python ./manage.py shell
>>> from django.contrib.sites.models import Site
>>> Site().save()
>>> Site.objects.all()[0].id
u'4fe7aa759e654e2662000000'

Поместите его в settings.py и все отлично заработало!

3 голосов
/ 11 января 2012
2 голосов
/ 01 марта 2012

Скорее всего, вы еще не создали сайт, для этого вам нужно выполнить команду

python manage.py syncdb

Это создаст сайт, теперь вам нужно добавить его site_id в ваш файл настроек.Идите, получите идентификатор сайта, подключитесь к работающему движку mongodb и выполните следующие команды

use mydatabase --/# or whatever name you have for your database.
db.django_site.find()

, вы получите что-то вроде

ObjectId("4f4e968adea3b3b30c00001d")

, затем в файле настроек введите

site_id = u'4f4e968adea3b3b30c00001d'

и интерфейс администратора должен работать.Есть ли это?

2 голосов
/ 02 февраля 2012

Я столкнулся с этим во время моей настройки на днях.

Как правило, вам нужно ввести логотип в оболочку Монго и найти ваш siteid, а затем добавить его в settings.py

войти в оболочку монго

mongo

выберите свой дБ

use *name*

затем выполните поиск () на django_site

db.django_site.find()

Затем откройте ваш файл settings.py и отредактируйте строку site_ID = "" (моя ниже)

SITE_ID = u'4f1f82011d41c81e5c00001d'

Это должно заставить вас работать

0 голосов
/ 25 июня 2014

оболочка sudo python manage.py

from django.contrib.sites.models import Site
Site().save()
Site.objects.all()[0].id
u'53aa6456984edd0d5e547e03'

Поместите это в settings.py SITE_ID = u'53aa6456984edd0d5e547e03 '

0 голосов
/ 09 марта 2012

Я использую manage.py syncdb, а затем manage.py tellsiteid, но все равно отображаю ошибку.

Я наконец-то решаю ее, удалив базу данных и снова синхронизировавшись.

Надеюсь, это кому-нибудь поможет:)

...