Ошибка движка Django MongoDB при запуске telliteid

Итак, я создал проект и приложение 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 ответов

Решение

Вы еще не создали сайт. Бежать manage.py syncdb создать один.

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

INSTALLED_APPS = (   
    (...)
    # 'django.contrib.sites',  # Comment this out
    (...)
)

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

python ./manage.py shell

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

а потом:

python ./manage.py tellsiteid

Вы пробовали это: http://django-mongodb.org/troubleshooting.html

По какой-то причине ни одно из решений здесь не сработало для меня. 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 и все работало отлично!

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

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

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

mongo

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

use *name*

затем сделайте поиск () на django_site

db.django_site.find()

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

SITE_ID = u'4f1f82011d41c81e5c00001d'

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

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

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'

и интерфейс администратора должен работать. Является ли?

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

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

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

Оболочка 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'

Другие вопросы по тегам