在创builddjangopipe理员后,获取站点匹配查询不存在错误

我正在通过标准的Django教程为应用程序创build一个pipe理员。 在设置和运行syncdb评论pipe理相关的东西后,我得到这个消息:

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

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

您的Django项目的Site对象缺失。 每个Django项目都有一个包含站点名称和域的Site对象。 通常在创buildDjango项目时(特别是当syncdb命令运行时)自动创build,但在你的情况下似乎没有发生。

要解决这个问题:

打开你的网站的Django shell( python manage.py shell )。

键入以下内容:

 >>> from django.contrib.sites.models import Site >>> Site.objects.create(name='example.com', domain='example.com') 

如果稍后要更改这些值,请转至pipe理面板( /admin/ ),然后编辑站点部分中的站点对象。

除了Simeon Visser针对您遇到的问题的答案之外,请确保您设置中的SITE_IDvariables与您新创build的Site SITE_ID的ID相匹配。

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

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

您也可以考虑使用django的fixture特性自动填充数据: https : //docs.djangoproject.com/en/dev/howto/initial-data/

 [ { "model" : "sites.site", "pk" : 1, "fields": { "name" : "example.com", "domain" : "127.0.0.1:8010" } } ] 

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

 #'django.contrib.sites', 

我是Django的新手。 阅读本教程时遇到同样的错误。 我的django_site数据库表是空的。 我select删除名为“django_ *”的所有表。 然后,当我reran syncdb ,创build了缺less的django表,并且django_site数据库表填充了id = 1,domain = example.com,name = example.com。 很显然, Site类是由django_site数据库表支持的。 现在我明白了这个问题以及上面使用Site.objects.create()方法填充表格的解决scheme。 感谢西蒙。

如果你使用南和initial_data灯具,数据可能被加载不正确。 要修复它添加

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

在你的设置文件的末尾

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