私は Django でアプリを作成しています。このアプリには、インスタンス化する必要があるいくつかのサイト全体の固定オブジェクトがあり、何らかの理由でフィクスチャにすることはできません。
たとえば、一部の (例: Permission
s) PK をハードコードできないのは、特定の順序でロードされるかどうか確信が持てないためです (さらに、pk=null を使用すると、それらが既に存在する場合は IntegrityError が返されます) .)
その他 (例: Site
) は の値に依存しますsettings.py
。 編集:これらは、プロジェクトが展開されるたびに実行する必要があります。それ以外の場合は、以下の super9 の提案に従って South のデータ移行を使用できます。
これらは Django モデルであるため、私のプロジェクトのどのアプリにも直接関係していません。それらをロードするのが最も理にかなっていますsettings.py
が、それは循環インポートになります。それは動作しurls.py
ますが、ローディングコードをそこに置くのはハックで場違いに思えます。
post_syncdb
次のようにレシーバーを接続することを検討しました。
@receiver(post_syncdb)
def create_groups_and_permissions(sender, **kwargs):
print "Creating groups and permissions"
u_ct = ContentType.objects.get(model="user")
Group.objects.get_or_create(name='Group 1')
Permission.objects.get_or_create(name="Perm 1", codename="perm_1", content_type=u_ct)
ただし、私は南を使用しているため、ドキュメントpost_syncdb
によると、テーブルが最初に作成されたときにのみ送信されます。syncdb
移行するたびに手動で呼び出すこともできますが、そうしない方がよいでしょう。
urls.py
それらを、または最も密接に関連するアプリに配置することをほぼ解決しましたがmodels.py
、フィクスチャとしてロードできない固定オブジェクトをロードする受け入れられた方法があるかどうかを確認するためにここをチェックすると思いました。