入门网站匹配查询不创建Django管理后存在错误

问题描述 投票:54回答:10

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

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

谁能帮我想出解决办法?

python django django-admin django-sites
10个回答
105
投票

为您的Django项目的Site对象丢失。每个Django项目具有包含该网站的名称和域Site对象。它创建一个Django项目时,通常会自动创建(特别是,当syncdb命令运行),但在你的情况似乎没有发生。

要解决这个问题:

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

键入以下命令:

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

如果你想要在以后改变这些值,去你的管理面板(/admin/)和部分Sites编辑站点对象。


0
投票

网站的目标是错过了,所以你必须加1个站点对象

解:

开放Django的壳(蟒蛇manage.py壳):

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_IDs.id),其值=你得到后


39
投票

除了西面维瑟的回答,对于那些你仍然遇到问题,请确保您的设置SITE_ID变量新创建Site对象的ID相符。


30
投票

当包括django.contrib.sites你INSTALLED_APPS,然后运行命令“蟒蛇manage.py迁移”应用程序会自动创建一个对象分为“django_site”表(用域名和显示名称等于“example.com”。有没有必要自己去创造。

也许你只需要设置SITE_ID = 1添加到您的settings.py文件。


6
投票

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

#'django.contrib.sites',

4
投票

你也可以考虑使用Django的夹具功能自动填充数据:https://docs.djangoproject.com/en/dev/howto/initial-data/

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

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

基本上ID在表中对应的哟旅游网站,并在settings.py应该匹配。


0
投票

我是一个Django新手。通过教程去的时候,我得到了同样的错误。我django_site数据库表是空的。我选择了删除名为“django_ *”的所有表。然后,当我重新syncdb,缺少的Django的表格创建和django_site数据库表与ID = 1,域名= example.com,名称= example.com填充。显然,Site类由django_site DB表支持。现在我明白了这个问题,并使用Site.objects.create()方法填充表格上方的解决方案。由于西蒙。


0
投票

如果您使用的南亚和initial_data灯具,数据可能会无法正常加载。要修复它添加

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

在你的设置文件的末尾


0
投票

有时候,如果您通过管理员添加更多的网站,并删除其中的每个网站都有一个ID,它不是为我工作,一旦我在它开始工作的DB改变了ID,所以一定要确保SITE_ID的ID数据库相匹配。

© www.soinside.com 2019 - 2024. All rights reserved.