Djangoフィクスチャについて私を悩ませていることの1つは、すべてのモデルの主キーを指定する必要があることです。各行に主キーを指定せずにフィクスチャを作成する方法はありますか?
「pk:1」(またはその他)の代わりに「pk:null」を使用すると、PKがNoneに設定され、オブジェクトが保存されるときに主キーが割り当てられます。
これは少なくともYAMLで機能します。手動で作成している場合は、これを使用していると思います。
Pkを使用せずに関係を追加したい場合は、NaturalKeysを確認する必要があります。
https://docs.djangoproject.com/en/dev/ref/Django-admin/#dumpdata-app-label-app-label-app-label-model
Manage.py dumpdataコマンドをチェックアウトすると、-natural-foreign、-natural-primaryと呼ばれるいくつかのオプションが表示されます。出力を見ると、主キーや外部キーを使用せずにオブジェクトがダンプされていることがわかります。
私の友人はfixture
モジュールを提案しました: http://farmdev.com/projects/fixture/
既存の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。*内にはさらに多くの検証呼び出しがあり、すべてのインラインe.t.cが機能することが保証されているわけではありません。それが私が実装できる唯一の解決策でした...((