Django ManyToManyField作为multiset

时间:2016-07-07 09:32:30

标签: python django django-models many-to-many multiset

有没有办法如何多次在m2m字段中存储同一个对象?

我们说我有以下型号

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就像一个集合,有没有办法实现multiset的行为?

1 个答案:

答案 0 :(得分:1)

您可以存储Item

,而不是将InventoryItem存储在您的广告资源中
class InventoryItem(models.Model):
    item = models.ForeignKey(Items)
    quantity = models.SmallIntegerField(default=1)
    inventory = models.ForeignKey(Inventory)

我们的想法是介绍一个为您处理数量的中产阶级,以及可能的其他事项,例如该项目是否可以叠加。

我能想到的唯一选择是复制一个项目对象,然后将这两个项目存储在清单中 - 这可能会或可能不会更好地用于您的用例