[英]Getting Site Matching Query Does Not Exist Error after creating django admin
我正在通过标准的 Django 教程为应用程序创建管理员。 在设置中评论与管理员相关的内容并运行 syncdb 后,我收到此消息:
DoesNotExist at /admin/ Site matching query does not exist.
谁能帮我解决这个问题?
Django 项目的Site
对象丢失。 每个 Django 项目都有一个Site
对象,其中包含站点的名称和域。 它通常在创建 Django 项目时自动创建(特别是在运行syncdb
命令时),但在您的情况下似乎没有发生。
要解决这个问题:
打开站点的 Django shell ( python manage.py shell
)。
输入以下内容:
>>> from django.contrib.sites.models import Site
>>> Site.objects.create(name='example.com', domain='example.com')
如果您想稍后更改这些值,请转到您的管理面板 ( /admin/
) 并在Sites
部分编辑站点对象。
除了 Simeon Visser 对那些仍然遇到问题的人的回答之外,请确保设置中的SITE_ID
变量与新创建的Site
对象的 ID 相匹配。
当您将django.contrib.sites添加到您的 INSTALLED_APPS 并运行命令“python manage.py migrate”时,应用程序会自动在“django_site”表中创建一个对象(域名和显示名称等于“example.com”。那里不需要自己创建。
可能您只需要将设置SITE_ID = 1添加到您的 settings.py 文件中。
如果在运行后您的站点表中已经有 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
将您在此处获得的 ID 获取到setting.py
中。 例如。
SITE_ID = 8
基本上表中对应的 yo tour 站点和 settings.py 中的 ID 应该匹配。
从已安装的应用程序中注释掉 django.contrib.sites。 IE
#'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"
}
}
]
缺少站点对象,因此您必须添加 1 个站点对象
解决方案:
打开 Django 外壳(python 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
)
我是 Django 新手。 在完成教程时我遇到了同样的错误。 我的django_site
数据库表是空的。 我选择删除所有名为“django_*”的表。 然后,当我重新运行syncdb
时,创建了缺少的 django 表,并且django_site
数据库表中填充了 id=1、domain=example.com、name=example.com。 显然Site
类由django_site
数据库表支持。 现在我理解了上面使用Site.objects.create()
方法填充表的问题和解决方案。 谢谢西蒙。
如果您使用 South 和 initial_data 装置,数据可能无法正确加载。 要修复它,请添加
if 'test' in sys.argv or 'jenkins' in sys.argv:
SOUTH_TESTS_MIGRATE = False
在你的设置文件的末尾
有时,如果您通过管理员添加更多站点并删除其中一些站点,每个站点都有一个 ID,一旦我更改了它开始工作的数据库中的 ID,它就对我不起作用,因此请确保 SITE_ID 与数据库中的 ID 匹配。
很长一段时间以来,我也一直在为同样的错误而苦苦挣扎。 我错误地从管理员的站点目录中删除了 example.com。 一旦我使用上述解决方案添加了网站,它就成功了。 当我创建 example.com 时,site_id 也会自动变为 2,因此还必须在我的设置文件中将 site_id 更改为 2。 谢谢你。
这都是因为您不小心从默认情况下的 django 管理站点 (example.com) 中删除了站点。 下面提到的代码也引发了运行时错误。
from django.contrib.sites.models import Site
所以只需将您的SITE_ID
增加1
例如,如果默认情况下它是1
而不是将其更改为2
从SITE_ID = 1
更改为: SITE_ID = 2
from django.contrib.sites.models import Site
Site.objects.create(name='example.com', domain='example.com')
以上解决了问题。
但是当我登录管理面板时,还有另一个网站 example.com,所以我相信如果有人输入 SITE_ID = 2 这也会起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.