在创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_ID
variables与您新创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匹配。