質問

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
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top