Python 获取站点匹配查询不存在创建django admin后出错
我将通过标准的Django教程为一个应用程序创建一个管理员。在对设置中与管理员相关的内容进行注释并运行syncdb后,我收到以下消息:Python 获取站点匹配查询不存在创建django admin后出错,python,django,django-admin,django-sites,Python,Django,Django Admin,Django Sites,我将通过标准的Django教程为一个应用程序创建一个管理员。在对设置中与管理员相关的内容进行注释并运行syncdb后,我收到以下消息: DoesNotExist at /admin/ Site matching query does not exist. 有人能帮我解决这个问题吗?Django项目的站点对象丢失了。每个Django项目都有一个站点对象,其中包含站点的名称和域。它通常是在创建Django项目时自动创建的(特别是在syncdb命令运行时),但在您的情况下,似乎没有发生这种情况 要解
DoesNotExist at /admin/ Site matching query does not exist.
有人能帮我解决这个问题吗?Django项目的
站点
对象丢失了。每个Django项目都有一个站点
对象,其中包含站点的名称和域。它通常是在创建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/
)并编辑站点
部分中的站点对象,以及Simeon Visser对仍遇到问题的用户的回答,确保设置中的SITE\u ID
变量与新创建的SITE
-对象的ID匹配。我是Django新手。我在阅读教程时也犯了同样的错误。我的django_站点
DB表为空。我选择删除所有名为“django_*”的表。然后,当我重新运行syncdb
时,创建了缺少的django表,并且用id=1、domain=example.com、name=example.com填充了django_站点
DB表。显然,Site
类由django_Site
DB表支持。现在我了解了上面使用Site.objects.create()
方法填充表的问题和解决方案。谢谢Simeon。 你也可以考虑使用Django的夹具特征自动填充数据:
如果使用South和initial_数据装置,可能无法正确加载数据。要修复它,请添加
if 'test' in sys.argv or 'jenkins' in sys.argv:
SOUTH_TESTS_MIGRATE = False
在设置文件的末尾当您将django.contrib.sites包含到已安装的_应用程序中并运行命令“python manage.py migrate”时,应用程序会自动在“django_site”表中创建一个对象(域名和显示名称等于“example.com”)。无需自行创建它
您可能只需要将设置SITE_ID=1添加到settings.py文件中。从已安装的应用程序中注释掉django.contrib.sites
#'django.contrib.sites',
有时,如果您通过管理员添加更多站点并删除其中一些站点,则每个站点都有一个ID,一旦我在数据库中更改了ID,它就不适用于我,因此请确保站点ID与数据库中的ID匹配。如果您在运行后站点表中已经有example.com
python manage.py migrate
您需要获取此条目的id
要获得身份证,你可以这样做-
python manage.py shell
from django.contrib.sites.models import Site
print Site.objects.get(name='example.com').id
在setting.py
中获取您在此处获得的id
SITE_ID = 8
表中对应的yo tour站点和settings.py中的ID基本上应该匹配。站点对象丢失,因此您必须添加1个站点对象 解决方案: 打开Django shell(pythonmanage.pyshell): 然后打开
settings.py
文件并添加SITE\u ID=3
将该值放在您在(
s.ID
)之后获得的SITE\u ID
=中我也在为同样的错误挣扎了很长一段时间。我错误地将example.com从admin中的sites目录中删除了。一旦我使用上述解决方案添加了该站点,它就起作用了。此外,当我创建example.com时,site\u id自动变为2,因此也不得不在我的设置文件中将site\u id更改为2。谢谢。所有这些都是由于您意外地从默认的django管理站点(example.com)中删除了该站点造成的。下面提到的代码还引发了运行时错误
from django.contrib.sites.models import Site
因此,只需通过1
例如,如果默认值为1
,则使用2
从
SITE\u ID=1
致:
SITE\u ID=2
来自django.contrib.sites.models导入站点
创建(name='example.com',domain='example.com')
以上解决了问题
但是当我登录管理面板时,有另一个site example.com,所以我相信如果有人把site_ID=2放进去,这也会起作用。非常感谢。只是想澄清一下,在创建站点时,应该在哪一点创建站点对象?当你这样做时:django-Admin.py startproject mysite?@DavidHaddad:我刚刚检查了django的源代码,事情发生了ns在
syncdb
命令创建表之后。如果您的项目然后使用django.contrib.sites
加载项,那么它将运行一些代码来创建Site
对象。很好,正是在运行syncdb之后引发了错误。再次感谢。还必须在设置中更改Site\u ID。pyI仍然存在错误a在我创建了名为“example.com”的站点对象之后。请务必注意,在django 1.8中,在添加contrib.sites
后进行迁移确实会添加一个站点,但您必须添加site\u ID
设置。Simeon的答案甚至不是必需的-只需将site\u ID
设置为1。如果您像我刚才删除site\u ID为1的记录那样搞砸了,只需创建新的在shell中记录id=1。这解决了我的问题,因为我一直在使用设置试图使程序包工作。是的+1。虽然不一定是对需要站点的人的修复,但这对诊断问题所在非常有帮助。
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
from django.contrib.sites.models import Site