2016-07-07 10 views
0

m2mフィールドに同じオブジェクトを複数回保存する方法はありますか?Django ManyToManyField multiset

のは、私は次のモデル

class Item(models.Model): 
    name = models.CharField(max_length=64) 


class Inventory(models.Model): 
    items = models.ManyToManyField('Items', blank=True) 

を持っていると私は

>>> inventory = Inventory() 
>>> inventory.save() 

>>> item1 = Item(name='Item 1') 
>>> item1.save() 

>>> item2 = Item(name='Item 2') 
>>> item2.save() 

いくつかのインスタンスを作成しましょう今私はインベントリに複数回、アイテムのそれらのインスタンスを追加します。

>>> inventory.items.add(item1) 
>>> inventory.items.add(item2) 

>>> inventory.items.all() 
[<Item: Item 1>, <Item: Item 2>] 

>>> inventory.items.add(item1) 

>>> inventory.items.all() 
[<Item: Item 1>, <Item: Item 2>] 

So ManyToManyFieldはセットのように機能しますが、マルチセットの動作を達成する方法はありますか?

+1

関連クロスサイトのためのより良いであってもなくてもよい:[在庫システムのモデル化SQL](http://gamedev.stackexchange.com/q/116996) – Sayse

答えて

1

代わりItem保存するので 'はインベントリ内のを、あなたは保存することができますInventoryItemのアイデアは、あなたがしなければならないようなあなたのための数量を扱うミドルクラスだけでなく、潜在的に他のものを導入している

class InventoryItem(models.Model): 
    item = models.ForeignKey(Items) 
    quantity = models.SmallIntegerField(default=1) 
    inventory = models.ForeignKey(Inventory) 

アイテムは積み重ねられます。私は考えることができる

唯一の選択肢は、インベントリにこれらの両方を項目オブジェクトを複製して、格納することである - またはあなたのユースケース

+0

ああ、私は中産階級をやらなければならないと思ったが、私は間違っていると思った。ありがとうございました。 – Zoli

+0

@Zoli - 私が言ったように、アイテムオブジェクトを複製するか、あるいは 'ArrayField'を使うなどの他の黒い魔法を潜在的に使って回避することができます。しかし、どちらも私にとって非常に良い選択肢には見えません。私はあなたが何らかのゲームを作っていると仮定して、いくつかのアイテムを積み重ねることができるようにすることも考えています(つまり、コインなど) – Sayse

関連する問題