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

时间:2012-07-13 18:27:32

标签: python django django-admin django-sites

我正在通过标准的Django教程为应用创建管理员。在设置和运行syncdb中评论管理相关的东西之后,我收到了这条消息:

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

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

13 个答案:

答案 0 :(得分:105)

缺少Django项目的Site对象。每个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')

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

答案 1 :(得分:37)

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

答案 2 :(得分:29)

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

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

答案 3 :(得分:5)

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

word1

答案 4 :(得分:4)

您还可以考虑使用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"
        }
    }
]

答案 5 :(得分:4)

如果您在运行

后已在站点表中安装了example.com
python manage.py migrate

您需要获取此条目的ID。

要获取您可以执行的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

基本上与你的旅游网站和settings.py对应的表中的ID应该匹配。

答案 6 :(得分:0)

我是Django的新手。在完成教程时我遇到了同样的错误。我的django_site数据库表是空的。我选择删除所有名为“django_ *”的表。然后当我重新syncdb时,创建了缺少的django表,并且使用id = 1,domain = example.com,name = example.com填充了django_site数据库表。显然,Site类由django_site数据库表支持。现在我了解了使用Site.objects.create()方法填充表格的问题和上面的解决方案。谢谢Simeon。

答案 7 :(得分:0)

如果使用South和initial_data灯具,则可能无法正确加载数据。要修复它,请添加

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

在设置文件的末尾

答案 8 :(得分:0)

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

答案 9 :(得分:0)

缺少站点对象,因此您必须添加1个站点对象

解决方案:

打开Django shell(python manage.py shell):

<?php
$timestamp=strtotime('10sec');
echo gmdate("Y-m-d\TH:i:s\Z", $timestamp);
?>

然后打开您的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 文件并添加settings.py 将该值放在SITE_ID = 3 =之后得到(SITE_ID

答案 10 :(得分:0)

我在相当长的一段时间内一直在同一个错误中挣扎。我错误地从admin的sites目录中删除了example.com。使用上述解决方案添加网站后,它就可以正常工作。当我创建example.com时,site_id也自动变为2,因此还必须在我的设置文件中将site_id更改为2。谢谢。

答案 11 :(得分:0)

这都是由于您不小心从django管理站点(默认为example.com)中删除了站点。下面提到的代码还引发了运行时错误。

SELECT TRUNC( 24 * ( end_date - start_date ) ) AS hours,
       TRUNC( MOD( 24 * 60 * ( end_date - start_date ), 60 ) ) AS minutes,
       ROUND( MOD( 24 * 60 * 60 * ( end_date - start_date ), 60 ) ) AS seconds
FROM   table_name;

因此只需在您的from django.contrib.sites.models import Site 中增加SITE_ID 例如,如果默认情况下是1,而不是用1进行更改 从 2 至: SITE_ID = 1

答案 12 :(得分:0)

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

以上解决了问题。

但是当我登录管理面板时,还有另一个站点 example.com,所以我相信如果有人将 SITE_ID = 2 这也可以工作。