ContentTypeマッチングクエリはPOST_SYNCDBには存在しません
-
12-12-2019 - |
質問
post_syncdb
信号を使用して、テーブルが作成されるとすぐにデータベースに追加のデータを追加しようとしています。
signals.post_syncdb.connect(init)
.
その後、init関数で、許可を設定したいので、を使います
ct = ContentType.objects.get(app_label='news', model='Article')
Permission(name='Approve articles', codename='can_approve_article', content_type=ct)
.
しかし、すべてのテーブルをドロップしてsyncdb
を実行すると、
...
File "...\base\functions\init.py", line 11, in init
ct = ContentType.objects.get(app_label='news', model='Article')
...
django.contrib.contenttypes.models.DoesNotExist: ContentType matching query does not exist.
.
私がやったいくつかのテスト:
-
syncdb
の外部にこのコードを試してもうまく機能します。 -
syncdb
をこのコードなしですべてのテーブルを作成し、次にこのコードを追加して変更を加えずにSyncDBを実行し、変更を加えずにSyncDBを実行してください。 - そして私はそれが働かせていることを確信していますが、それ以来他の場所に多くのものを変えました。
- さまざまなアプリで他のモデルと同じエラーが発生します。
- 信号は約10回発射され、最初の数回のみがエラーを投げるだけです。
あらゆるヒントのためにたくさんありがとう!
解決
これをinit関数の先頭に追加する:
from django.contrib.contenttypes.management import update_all_contenttypes
update_all_contenttypes() # make sure all content types exist
. 所属していません StackOverflow