4

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 を変更せずに実行しても、問題なく動作します。
  • そして、以前は機能していたと確信していますが、それ以来、他の場所で多くのことを変更したため、どこから始めればよいかわかりません。
  • 別のアプリの他のモデルでも同じエラーが発生します。
  • シグナルは約 10 回発生し、最初の数回だけエラーがスローされます。

ヒントをありがとう!

4

1 に答える 1

7

これを init 関数の先頭に追加します。

 from django.contrib.contenttypes.management import update_all_contenttypes
 update_all_contenttypes() # make sure all content types exist
于 2013-07-12T12:15:28.950 に答える