繁体   English   中英

创建django admin后获取站点匹配查询不存在错误

[英]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而不是将其更改为2SITE_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM