web-dev-qa-db-ja.com

Django adminを作成した後、サイト一致クエリを取得してもエラーが発生しない

標準のDjangoチュートリアルを実行して、アプリの管理者を作成します。設定で管理者関連のものにコメントし、syncdbを実行すると、次のメッセージが表示されます。

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

誰でも私がこれを理解するのを助けることができますか?

54
David Haddad

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のサイトオブジェクトを編集します。

105
Simeon Visser

問題が引き続き発生する場合のSimeon Visserの回答に加えて、設定のSITE_ID変数が、新しく作成されたSite- objectのIDと一致することを確認してください。

39
0sh

Django.contrib.sitesをINSTALLED_APPSに含めて「python manage.py migrate」コマンドを実行すると、アプリは自動的にオブジェクトを「Django_site」テーブルに作成します(ドメイン名と表示名は「example.com」。自分で作成する必要はありません。

おそらく、設定SITE_ID = 1をsettings.pyファイルに追加するだけです。

29
Ricardo Silva

インストールされたアプリからDjango.contrib.sitesをコメントアウトします。つまり.

#'Django.contrib.sites',

実行後にサイトテーブルに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

ここで取得したIDをsetting.pyに取得します。例えば。

SITE_ID = 8

基本的に、ツアーサイトに対応するテーブルとsettings.pyのIDは一致する必要があります。

4
Aniket Thakur

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
Miao ZhiCheng

Southおよびinitial_dataフィクスチャを使用すると、データが正しくロードされない可能性があります。修正するには追加

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

設定ファイルの最後に

0
eviltnan

サイトオブジェクトが欠落しているため、1つのサイトオブジェクトを追加する必要があります

溶液:

open Django Shell(python manage.py Shell):

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 =取得後(s.id

0
Rahul Singh

管理者を介してサイトを追加し、各サイトにIDがあるサイトをいくつか削除すると、動作するようになったDBでIDを変更すると機能しなくなったため、SITE_IDがデータベースのIDと一致することを確認してください。

0
Radek

私はDjango newbieです。チュートリアルを進めると、同じエラーが発生しました。私のDjango_site DBテーブルは空でした。その後、syncdbを再実行すると、欠落しているDjango=テーブルが作成され、Django_site DBテーブルにid = 1、domain = example.com、nameが入力されました= example.com。明らかにSiteクラスはDjango_site DBテーブルによって支えられていますが、Site.objects.create()メソッドを使用してテーブルに入力された上記の問題と解決策を理解できました。シメオン。

0
Phil Friesen