运行tellsiteid时出现Django MongoDB Engine错误

hol*_*fix 6 django mongodb pymongo django-nonrel

所以我根据教程创建了一个django项目和应用程序,我拥有MongoDB引擎所需的所有依赖项,所有这些似乎都工作正常,花花公子直到我尝试启用管理界面.

我取消注释了需求位,并将"django_mongodb_engine"和"djangotoolbox"添加到settings.py中的apps部分

当我尝试进入localhost:8000/admin时出现错误:

"AutoField(默认主键)值必须是表示MongoDB上的ObjectId的字符串(取而代之的是u'1'.请确保您的SITE_ID包含有效的ObjectId字符串."

经过一些谷歌搜索显然我必须运行manage.py tellsiteid并且它会向我吐出我可以在我的settings.py中使用的ID,这将使错误消失,但是当我尝试运行manage.py tellsiteid时,我得到:

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.
Run Code Online (Sandbox Code Playgroud)

小智 12

您可以创建您的网站,然后获取ID:

python ./manage.py shell

>>> from django.contrib.sites.models import Site
>>> s = Site()
>>> s.save()
Run Code Online (Sandbox Code Playgroud)

然后:

python ./manage.py tellsiteid
Run Code Online (Sandbox Code Playgroud)


Mar*_*mro 12

如果您不需要该sites功能(非常可能),只需关闭django.contrib.sites应用程序,它将解决与SITE_ID相关的MongoDB问题:

INSTALLED_APPS = (   
    (...)
    # 'django.contrib.sites',  # Comment this out
    (...)
)
Run Code Online (Sandbox Code Playgroud)


小智 5

您尚未创建任何网站.运行manage.py syncdb以创建一个.

  • 即使在删除数据库并重新开始之后,`manage.py syncdb`也会引发相同的异常.这对我有用:1)删除数据库2)根据http://stackoverflow.com/a/9780984/76900创建一个`Site` 3)将`SITE_ID`添加到设置4)运行`manage.py syncdb` (3认同)