62

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

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

誰かが私がこれを理解するのを手伝ってもらえますか?

4

13 に答える 13

108

SiteDjangoプロジェクトのオブジェクトがありません。各DjangoプロジェクトにはSite、サイトの名前とドメインを含むオブジェクトがあります。通常、Djangoプロジェクトの作成時(特にsyncdbコマンドの実行時)に自動的に作成されますが、あなたの場合は発生しなかったようです。

それを修正するには:

サイトのDjangoシェルを開きます(python manage.py shell)。

次のように入力します。

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

後でこれらの値を変更する場合は、管理パネル(/admin/)に移動し、セクションのサイトオブジェクトを編集しますSites

于 2012-07-13T18:45:59.550 に答える
44

まだ問題が発生している場合のSimeonVisserの回答に加えてSITE_ID、設定の変数が新しく作成したオブジェクトのIDと一致することを確認してくださいSite

于 2013-11-15T11:30:57.400 に答える
36

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

おそらく、設定SITE_ID=1をsettings.pyファイルに追加する必要があります。

于 2016-06-21T07:11:31.347 に答える
9

実行後にすでに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

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

于 2018-02-06T07:21:22.363 に答える
7

インストールされているアプリからdjango.contrib.sitesをコメントアウトします。すなわち

#'django.contrib.sites',
于 2017-02-17T20:27:40.033 に答える
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"
        }
    }
]
于 2014-04-12T08:45:28.803 に答える
1

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

解決:

Djangoシェル(python 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 = 3SITE_IDs.id

于 2019-02-05T05:29:22.670 に答える
0

私はDjangoの初心者です。チュートリアルを実行すると、同じエラーが発生しました。私のdjango_siteDBテーブルは空でした。「django_*」という名前のすべてのテーブルを削除することにしました。次に、再実行するsyncdbと、欠落しているdjangoテーブルが作成され、django_siteDBテーブルにid = 1、domain = example.com、name=example.comが入力されました。明らかに、Siteクラスはdjango_siteDBテーブルによって支えられています。Site.objects.create()これで、メソッドを使用してテーブルに入力された上記の問題と解決策を理解しました。シメオンに感謝します。

于 2014-01-02T16:30:00.930 に答える
0

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

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

設定ファイルの最後に

于 2014-10-28T15:23:25.367 に答える
0

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

于 2017-10-21T23:50:05.563 に答える
0

私もかなり長い間同じエラーに苦しんでいました。adminのsitesディレクトリからexample.comを誤って削除してしまいました。上記のソリューションを使用してサイトを追加すると、機能しました。また、example.comを作成したときにsite_idが自動的に2になったため、設定ファイルでもsite_idを2に変更する必要がありました。ありがとうございました。

于 2019-09-28T09:10:03.657 に答える
0

これはすべて、デフォルトのdjango管理サイト(example.com)から誤ってサイトを削除した場合に発生します。下記のコードでもランタイムエラーが発生しました。

from django.contrib.sites.models import Site

SITE_IDしたがって、単純にbyをインクリメントします1 。たとえば、デフォルトで TO から 1の変更で変更する場合は、次のようにします。2SITE_ID = 1SITE_ID = 2

于 2020-01-22T10:52:21.317 に答える
0
from django.contrib.sites.models import Site
Site.objects.create(name='example.com', domain='example.com')

上記で問題は解決しました。

しかし、管理パネルにログインしたとき、別のサイトexample.comがあったので、誰かがSITE_ID = 2とすると、これも機能すると思います。

于 2021-06-05T01:52:17.640 に答える