Ошибка движка 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'