Django ManyToManyField как мультимножество
Есть ли способ, как хранить один и тот же объект в поле 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 работает как набор, есть ли способ достичь поведения мультимножества?
1 ответ
Вместо хранения Item
в вашем инвентаре, вы можете хранить InventoryItem
"s
class InventoryItem(models.Model):
item = models.ForeignKey(Items)
quantity = models.SmallIntegerField(default=1)
inventory = models.ForeignKey(Inventory)
Идея состоит в том, чтобы вы представили средний класс, который обрабатывает количество для вас, а также потенциально другие вещи, например, если элемент может быть наращиваемым.
Единственная альтернатива, о которой я могу подумать, - это продублировать предметный предмет, а затем сохранить их оба в инвентаре, что может быть лучше, а может и не лучше для вашего случая