2012-07-04 5 views
5

私はDjangoのパーミッション用のフィクスチャを作成しています。私はそれらを必要な方法でロードすることができます。しかし、私の質問は..テーブルauth_group_permissionsのための什器をロードしたい、私はgroup_idpermission_idを指定する必要がありますが、残念ながらこれを処理する最良の方法はありません。これをプログラムで簡単に行う方法はありますか?私は特定の値のためにidを得て、それを記入することができますか?これはどのようにして正常に行われますか?権限のためのDjangoの備品

答えて

8

適切な解決策は、フレームワーク自体と同じ方法でアクセス許可を作成することです。

management.pyまたはmanagement/__init__.pyモジュールの内蔵post_syncdb信号に接続し、そこでアクセス権を作成する必要があります。ドキュメンテーションは、post_syncdbシグナルに応答して実行されるすべての作業がデータベースの変更を実行してはならないと述べていますが、フレームワーク自体がこのシグナルに応答して権限を作成することにも注意してください。

django.contrib.authアプリケーションのmanagement moduleをご覧になることをお勧めします。

3

Django> = 1.7以上では、逐次化オプションとして「自然キー」が導入されたため、答えはもはや正解ではなくなりました。

あなたはドキュメントが明示的にオブジェクトが自動的にデータベース中にジャンゴによって作成された...自然キーがとき...

あるためのユースケースに言及しDjango serialization documentation

で自然キーの詳細を読むことができます与えられた関係の主キーは予測が容易ではありません。移行がいつどのように実行されたかによって異なります。これは、特にPermission、Group、Userなどのオブジェクトを自動的に生成するすべてのモデルに当てはまります。だから、auth_group_permissionsに関するあなたの特定の質問のために、あなたは次の構文を使用して、あなたのフィクスチャをダンプします

python manage.py dumpdata auth --natural-foreign --natural-primary -e auth.Permission

そのテーブルは人口であるようauth_permissionsテーブルは、明示的に-eフラグを排除しなければなりませんmigrateコマンドで実行され、治具をロードする前に既にデータがあります。

このフィクスチャは、他のフィクスチャと同じ方法でロードされます

関連する問題