我正在通过标准 Django 教程为应用程序创建管理员。在设置中评论与管理员相关的内容并运行 syncdb 后,我收到以下消息:
DoesNotExist at /admin/ Site matching query does not exist.
谁能帮我解决这个问题?
我正在通过标准 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
您的设置中的变量与您新创建的对象的 ID 匹配Site
。
当您将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
基本上对应于旅游站点的表中的 ID 和 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 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
)之后得到的值
我是 Django 新手。我在阅读教程时遇到了同样的错误。我的django_site
数据库表是空的。我选择删除所有名为“django_*”的表。然后,当我重新运行时syncdb
,创建了丢失的 django 表,并django_site
使用 id=1、domain=example.com、name=example.com 填充了 DB 表。显然,Site
该类由django_site
DB 表支持。现在我了解了使用该Site.objects.create()
方法填充表格的问题和解决方案。谢谢西蒙。
如果您使用 South 和 initial_data 固定装置,数据可能无法正确加载。要修复它添加
if 'test' in sys.argv or 'jenkins' in sys.argv:
SOUTH_TESTS_MIGRATE = False
在设置文件的末尾
这一切都是因为如果您不小心从默认情况下(example.com)的 django 管理站点中删除了站点。下面提到的代码也引发了运行时错误。
from django.contrib.sites.models import Site
所以只需在你SITE_ID
的 by中增加一个1
例如,如果默认情况下它1
比2
从
SITE_ID = 1
TO 更改来更改它:
SITE_ID = 2
有时,如果您通过管理员添加更多站点并删除其中一些站点,每个站点都有一个 ID,一旦我更改了它开始工作的数据库中的 ID,它就对我不起作用,因此请确保 SITE_ID 与数据库中的 ID 匹配。
from django.contrib.sites.models import Site
Site.objects.create(name='example.com', domain='example.com')
以上解决了问题。
但是当我登录管理面板时,还有另一个站点 example.com,所以我相信如果有人将 SITE_ID = 2 这也可以。
很长一段时间以来,我也在为同样的错误而苦苦挣扎。我错误地从管理员的站点目录中删除了 example.com。一旦我使用上述解决方案添加了站点,它就可以工作了。当我创建 example.com 时,site_id 也自动变为 2,因此也必须在我的设置文件中将 site_id 更改为 2。谢谢你。