我要通过标准的Django教程为应用程序创建一个管理员。在设置评论管理相关的东西和运行执行syncdb后,我得到这个消息:
DoesNotExist at /admin/ Site matching query does not exist.
谁能帮我想出解决办法?
为您的Django项目的Site
对象丢失。每个Django项目具有包含该网站的名称和域Site
对象。它创建一个Django项目时,通常会自动创建(特别是,当syncdb
命令运行),但在你的情况似乎没有发生。
要解决这个问题:
打开你的网站(python manage.py shell
)Django的壳。
键入以下命令:
>>> from django.contrib.sites.models import Site
>>> Site.objects.create(name='example.com', domain='example.com')
如果你想要在以后改变这些值,去你的管理面板(/admin/
)和部分Sites
编辑站点对象。
网站的目标是错过了,所以你必须加1个站点对象
解:
开放Django的壳(蟒蛇manage.py壳):
In [1]: from django.contrib.sites.models import Site
In [2]: Site.objects.create(name='example.com',domain='example.com').save()
In [3]: s=Site.objects.filter(name='example.com')[0]
In [4]: s.id
Out[4]: 3
然后打开你的settings.py
文件,并添加SITE_ID = 3
放在SITE_ID
(s.id
),其值=你得到后
除了西面维瑟的回答,对于那些你仍然遇到问题,请确保您的设置SITE_ID
变量新创建Site
对象的ID相符。
当包括django.contrib.sites你INSTALLED_APPS,然后运行命令“蟒蛇manage.py迁移”应用程序会自动创建一个对象分为“django_site”表(用域名和显示名称等于“example.com”。有没有必要自己去创造。
也许你只需要设置SITE_ID = 1添加到您的settings.py文件。
注释掉从安装的应用程序django.contrib.sites。即
#'django.contrib.sites',
你也可以考虑使用Django的夹具功能自动填充数据:https://docs.djangoproject.com/en/dev/howto/initial-data/
[
{
"model" : "sites.site",
"pk" : 1,
"fields": {
"name" : "example.com",
"domain" : "127.0.0.1:8010"
}
}
]
如果你已经有example.com在你的网站,你的表后运行
python manage.py migrate
你需要得到该行的ID。
为了让你能做到的ID -
python manage.py shell
from django.contrib.sites.models import Site
print Site.objects.get(name='example.com').id
让你来到这里进入setting.py
的ID。例如。
SITE_ID = 8
基本上ID在表中对应的哟旅游网站,并在settings.py应该匹配。
我是一个Django新手。通过教程去的时候,我得到了同样的错误。我django_site
数据库表是空的。我选择了删除名为“django_ *”的所有表。然后,当我重新syncdb
,缺少的Django的表格创建和django_site
数据库表与ID = 1,域名= example.com,名称= example.com填充。显然,Site
类由django_site
DB表支持。现在我明白了这个问题,并使用Site.objects.create()
方法填充表格上方的解决方案。由于西蒙。
如果您使用的南亚和initial_data灯具,数据可能会无法正常加载。要修复它添加
if 'test' in sys.argv or 'jenkins' in sys.argv:
SOUTH_TESTS_MIGRATE = False
在你的设置文件的末尾
有时候,如果您通过管理员添加更多的网站,并删除其中的每个网站都有一个ID,它不是为我工作,一旦我在它开始工作的DB改变了ID,所以一定要确保SITE_ID的ID数据库相匹配。