Django ManyToManyField 作为多重集
Django ManyToManyField as 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>]
那么ManyToManyField就像集合一样工作,有什么办法可以实现multiset的行为吗?
您可以将 InventoryItem
存储
,而不是将 Item
存储在您的库存中
class InventoryItem(models.Model):
item = models.ForeignKey(Items)
quantity = models.SmallIntegerField(default=1)
inventory = models.ForeignKey(Inventory)
我们的想法是引入一个中间层 class 来为您处理数量,以及其他可能的事情,比如物品是否可以堆叠。
我能想到的唯一替代方法是复制一个项目对象,然后将它们都存储在库存中——这对您的用例来说可能更好,也可能不好
有什么方法可以多次在 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>]
那么ManyToManyField就像集合一样工作,有什么办法可以实现multiset的行为吗?
您可以将 InventoryItem
存储
Item
存储在您的库存中
class InventoryItem(models.Model):
item = models.ForeignKey(Items)
quantity = models.SmallIntegerField(default=1)
inventory = models.ForeignKey(Inventory)
我们的想法是引入一个中间层 class 来为您处理数量,以及其他可能的事情,比如物品是否可以堆叠。
我能想到的唯一替代方法是复制一个项目对象,然后将它们都存储在库存中——这对您的用例来说可能更好,也可能不好