web-dev-qa-db-ja.com

Django:主キーを指定せずにフィクスチャを作成しますか?

Djangoフィクスチャについて私を悩ませていることの1つは、すべてのモデルの主キーを指定する必要があることです。各行に主キーを指定せずにフィクスチャを作成する方法はありますか?

55
David Wolever

「pk:1」(またはその他)の代わりに「pk:null」を使用すると、PKがNoneに設定され、オブジェクトが保存されるときに主キーが割り当てられます。

これは少なくともYAMLで機能します。手動で作成している場合は、これを使用していると思います。

80
spookylukey

Pkを使用せずに関係を追加したい場合は、NaturalKeysを確認する必要があります。

https://docs.djangoproject.com/en/dev/ref/Django-admin/#dumpdata-app-label-app-label-app-label-model

13
Eduardo

Manage.py dumpdataコマンドをチェックアウトすると、-natural-foreign、-natural-primaryと呼ばれるいくつかのオプションが表示されます。出力を見ると、主キーや外部キーを使用せずにオブジェクトがダンプされていることがわかります。

1
molecular

私の友人はfixtureモジュールを提案しました: http://farmdev.com/projects/fixture/

0
David Wolever

既存の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が機能することが保証されているわけではありません。それが私が実装できる唯一の解決策でした...((

0
Andrey Belyak