2009-11-22 14 views
6

のは、私は次のように定義されたクラス構造を持っているとしましょう:ユニークなフィールド値と多対多の関係

Class Item(models.Model): 
    ... 
    price = models.IntegerField() 
    upc = models.IntegerField() 
    ... 

Class Store(models.Model): 
    ... 
    inventory = models.ManyToManyField(Item) 
    ... 

基本的に私は店のモデルが同じインベントリへのアクセス権を持っていると思います。しかし、アイテムモデルの価格の価値は、それにリンクする各店舗ごとに一意になります。例えばすべての店舗にアクセスできるbikeというアイテムモデルのインスタンスがあるかもしれません。すべての店舗でupc(バーコード)は同じですが、価格は店舗ごとに異なります。このクラス構造を使用してその関係を実装する方法はありますか?

答えて

7

明示的なthroughテーブルを使用してください。 the documentationを参照してください。

+0

返信いただきありがとうございます。それは理にかなっていると思いますが、各店舗ごとに価格が一意になることをどのように確認できるか説明できますか? – buken

+0

これはdocsの例から明らかです。仲介テーブル/モデルを実装し、Store/Itemの任意のコンボに対して、価格などの追加データを持つことができます( 'Item'モデルから' price'フィールドを削除することができます)。 –

+1

特定の店舗の価格の一意性を保証する必要がある場合(奇妙な要求のように思えます)、スルーモデルのunique_togetherメタオプションを使用して( '店舗'、 '価格') unique_together。 –