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

Dav*_*dad 55 python django django-admin django-sites

我正在通过标准的Django教程为应用程序创建管理员.在设置中评论管理相关的东西并运行syncdb后,我收到此消息:

DoesNotExist at /admin/ Site matching query does not exist.
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我解决这个问题吗?

Sim*_*ser 106

Site您的Django项目的对象丢失了.每个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')
Run Code Online (Sandbox Code Playgroud)

如果您想稍后更改这些值,请转到管理面板(/admin/)并在该部分中编辑站点对象Sites.

  • 非常感谢。只是为了澄清应该在创建站点的哪个点创建站点对象?当你这样做时:django-admin.py startproject mysite? (2认同)
  • 还必须更改 settings.py 中的 SITE_ID (2认同)

Mil*_*dek 39

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

  • 绝对值得注意的是,使用django 1.8,在添加`contrib.sites`之后进行迁移会添加一个站点,但是您必须添加`SITE_ID`设置.Simeon的答案甚至不需要 - 只需`SITE_ID`即可. (2认同)
  • 如果你像我刚刚删除 SITE_ID 1 的记录一样搞砸了,只需在 shell 中创建 id=1 的新记录即可。 (2认同)

Ric*_*lva 32

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

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


小智 6

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

#'django.contrib.sites',
Run Code Online (Sandbox Code Playgroud)


Ani*_*kur 5

运行后,如果您的站点表中已经有example.com

python manage.py migrate
Run Code Online (Sandbox Code Playgroud)

您需要获取此条目的ID。

要获取ID,您可以-

python manage.py  shell
from django.contrib.sites.models import Site
print Site.objects.get(name='example.com').id
Run Code Online (Sandbox Code Playgroud)

获取您在此处输入的ID setting.py。例如。

SITE_ID = 8
Run Code Online (Sandbox Code Playgroud)

基本上,对应于您的游览网站的表格中的ID和settings.py中的ID应该匹配。