Django フィクスチャに関して私を悩ませていることの 1 つは、すべてのモデルの主キーを指定する必要があることです。行ごとに主キーを指定せずにフィクスチャを作成する方法はありますか?
5 に答える
「pk: 1」(またはその他) の代わりに「pk: null」を使用すると、PK が None に設定され、オブジェクトが保存されるときにプライマリ キーが割り当てられます。
これは少なくとも YAML で機能します。手動で作成している場合は、それを使用していると思います。
pk を使用せずにリレーションを追加する場合は、Natural Keys を確認する必要があります。
https://docs.djangoproject.com/en/dev/ref/django-admin/#dumpdata-app-label-app-label-app-label-model
manage.py dumpdata コマンドを確認すると、--natural-foreign、--natural-primary というオプションがいくつか表示されます。出力を見ると、主キーまたは外部キーを使用せずにオブジェクトがダンプされていることがわかります。
既存のDBスキーマを変更する可能性なしに処理する必要があったため、複雑な主キーを持つテーブル、またはまったく持たないテーブルが必要ですが、シリアルのものは必要ありません。私がしたこと:
フィールドに primary_key=True を指定しましたが、これはまったく一意であってはならず、オーバーロードされたメソッドを記述しました。
class ContraIndicationsMedicines(models.Model):
contra_indication = models.ForeignKey(ContraIndication, primary_key=True)
medicine = models.ForeignKey(Medicine)
def validate_unique(self, exclude=None):
pass
実際、それは私のニーズには合っていましたが、django.contib.admin.* 内でより多くの検証呼び出しがあり、すべてのインラインなどの動作が保証されているわけではありません。それが私が実装できる唯一の解決策でした... ((
私の友人がfixture
モジュールを提案しました: http://farmdev.com/projects/fixture/