2016-10-12 15 views
0

私の場合、機器とアセットの2つのモデルがあります:どちらも独自のフィールドを持っていますが、asset_numberという1つのユニークなフィールドを共有する必要があります。共有すると、機器を作成するときに入力されたasset_numberのユーザは、EquipmentとAssetデータベースの両方に対してチェックされます。すでに存在する場合は、これが一意ではないことをユーザーに知らせるためのプロンプトが表示されます。django:2つのモデルが1つのユニークなプライマリキーを共有する方法

これは、モデルが1つのみの場合、unique = Trueと設定すると簡単に実行できます。しかし、私が2つのモデルのためにやりたいのであれば、どうすればいいのですか?

TIA

答えて

0

私は最善の解決策は、親クラスを作成し、それから、両方AssetEquipment継承を作ることになると思います。

たとえば、asset_idの一意のフィールドを持つBaseAssetクラスを作成できます。どちらのクラスもasset_idの同じテーブルを共有するので、衝突することはありません。

class BaseAsset(models.Model): 
    asset_id = models.IntegerField(unique=True) 

class Asset(BaseAsset): 
    . 
    . 
    . 

class Equipment(BaseAsset): 
    . 
    . 
    . 
+1

私は第2クラスは 'class Equipment(BaseAssest):' –

+1

であるべきだと思います。コピーして貼り付けたときに起こります: –

+0

ポスターがこの解決策を使用する場合、 'models.AutoField() 'より良いかもしれない?そうすれば自動的に生成されます。 https://docs.djangoproject.com/en/1.10/ref/models/fields/#autofield –

0

これはまったくいい考えではありません。アセットと機器のフィールドが異なる場合は、異なるクラスにする必要があります。 サブクラスでキーを共有すると、現実を反映していないデータベースになります。 スキーマを破損するよりも、ビューの一意性を強化する方がよいでしょう。

関連する問題