62

我正在通过标准 Django 教程为应用程序创建管理员。在设置中评论与管理员相关的内容并运行 syncdb 后,我收到以下消息:

DoesNotExist at /admin/ Site matching query does not exist.

谁能帮我解决这个问题?

4

13 回答 13

108

缺少 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

于 2012-07-13T18:45:59.550 回答
44

除了 Simeon Visser 对那些仍然遇到问题的人的回答之外,请确保SITE_ID您的设置中的变量与您新创建的对象的 ID 匹配Site

于 2013-11-15T11:30:57.400 回答
36

当您将django.contrib.sites包含到您的 INSTALLED_APPS 并运行命令“python manage.py migrate”时,应用程序会自动在“django_site”表中创建一个对象(域名和显示名称等于“example.com”。有无需自己创建。

可能您只需将设置SITE_ID = 1添加到您的 settings.py 文件中。

于 2016-06-21T07:11:31.347 回答
9

如果您在运行后的站点表中已经有 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

基本上对应于旅游站点的表中的 ID 和 settings.py 中的 ID 应该匹配。

于 2018-02-06T07:21:22.363 回答
7

从已安装的应用程序中注释掉 django.contrib.sites。IE

#'django.contrib.sites',
于 2017-02-17T20:27:40.033 回答
4

您还可以考虑使用 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"
        }
    }
]
于 2014-04-12T08:45:28.803 回答
1

缺少站点对象,因此您必须添加 1 个站点对象

解决方案:

打开 Django shell(python manage.py shell):

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)之后得到的值

于 2019-02-05T05:29:22.670 回答
0

我是 Django 新手。我在阅读教程时遇到了同样的错误。我的django_site数据库表是空的。我选择删除所有名为“django_*”的表。然后,当我重新运行时syncdb,创建了丢失的 django 表,并django_site使用 id=1、domain=example.com、name=example.com 填充了 DB 表。显然,Site该类由django_siteDB 表支持。现在我了解了使用该Site.objects.create()方法填充表格的问题和解决方案。谢谢西蒙。

于 2014-01-02T16:30:00.930 回答
0

如果您使用 South 和 initial_data 固定装置,数据可能无法正确加载。要修复它添加

if 'test' in sys.argv or 'jenkins' in sys.argv:
    SOUTH_TESTS_MIGRATE = False

在设置文件的末尾

于 2014-10-28T15:23:25.367 回答
0

这一切都是因为如果您不小心从默认情况下(example.com)的 django 管理站点中删除了站点。下面提到的代码也引发了运行时错误。

from django.contrib.sites.models import Site

所以只需在你SITE_ID的 by中增加一个1 例如,如果默认情况下它12SITE_ID = 1 TO 更改来更改它: SITE_ID = 2

于 2020-01-22T10:52:21.317 回答
0

有时,如果您通过管理员添加更多站点并删除其中一些站点,每个站点都有一个 ID,一旦我更改了它开始工作的数据库中的 ID,它就对我不起作用,因此请确保 SITE_ID 与数据库中的 ID 匹配。

于 2017-10-21T23:50:05.563 回答
0
from django.contrib.sites.models import Site
Site.objects.create(name='example.com', domain='example.com')

以上解决了问题。

但是当我登录管理面板时,还有另一个站点 example.com,所以我相信如果有人将 SITE_ID = 2 这也可以。

于 2021-06-05T01:52:17.640 回答
0

很长一段时间以来,我也在为同样的错误而苦苦挣扎。我错误地从管理员的站点目录中删除了 example.com。一旦我使用上述解决方案添加了站点,它就可以工作了。当我创建 example.com 时,site_id 也自动变为 2,因此也必须在我的设置文件中将 site_id 更改为 2。谢谢你。

于 2019-09-28T09:10:03.657 回答