Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取站点匹配查询不存在创建django admin后出错_Python_Django_Django Admin_Django Sites - Fatal编程技术网

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

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命令运行时),但在您的情况下,似乎没有发生这种情况 要解

我将通过标准的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