运行tellsiteid时出现Django MongoDB Engine错误

时间:2012-01-11 12:41:47

标签: django mongodb pymongo django-nonrel

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

我取消注释了需要位,并将'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.

9 个答案:

答案 0 :(得分:12)

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

python ./manage.py shell

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

然后:

python ./manage.py tellsiteid

答案 1 :(得分:12)

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

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

答案 2 :(得分:5)

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

答案 3 :(得分:3)

答案 4 :(得分:3)

出于某种原因,这里没有一个解决方案适合我。 python ./manage.py tellsiteid,没有django_site集合,评论'django.contrib.sites'会导致奇怪的错误。

从shell中抓取ID对我有用,详情请点击:

https://gist.github.com/ielshareef/2986459 或者Site matching query does not exist

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

把它放在settings.py中,一切都很好!

答案 5 :(得分:2)

我在前几天的安装过程中遇到了这个问题。

基本上你需要将logo添加到mongo shell中并查找你的siteid然后添加你的settings.py

登录mongo shell

mongo

选择你的数据库

use *name*

然后在django_site上执行find()

db.django_site.find()

然后打开您的settings.py并编辑site_ID =“”行(我的下面是

SITE_ID = u'4f1f82011d41c81e5c00001d'

这应该让你起步并运行

答案 6 :(得分:2)

很可能你还没有创建一个网站,为此你需要运行命令

python manage.py syncdb

这会创建网站,现在您需要在设置文件中添加其site_id。获取站点ID,连接到正在运行的mongodb引擎,然后运行以下命令

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

你会得到像

这样的东西
ObjectId("4f4e968adea3b3b30c00001d")

然后在你的设置文件中,输入

site_id = u'4f4e968adea3b3b30c00001d'

和管理界面应该工作。是吗?

答案 7 :(得分:0)

我使用manage.py syncdb然后使用manage.py tellsiteid,但仍显示错误。

我最终通过删除数据库并再次同步来解决它。

希望这可以帮助某人:)

答案 8 :(得分:0)

sudo python manage.py shell

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

将它放在settings.py中     SITE_ID = u&#39; 53aa6456984edd0d5e547e03&#39;