Django - Как добавить несколько экземпляров одной модели в поле - PullRequest
2 голосов
/ 12 января 2020

У меня есть класс, который выглядит следующим образом. В пачке предметов я хочу, чтобы номер этого экземпляра Item и сколько это было числом.

class Item(models.Model):
    title = models.CharField(max_length=100)
    price = models.DecimalField(decimal_places=2, max_digits=10)
    is_pack = models.BooleanField(default=False)
    pack_items = models.ManyToManyField(PackItem, blank=True)
class PackItem(models.Model):
    packitem = models.ForeignKey('Item', on_delete=models.CASCADE)
    quantity = models.IntegerField(default=1)

Кажется, это работает, но каждый раз, когда я создаю новый пакет в админке, мне нужно сначала создать один за другим каждый PackItem, а затем поместить их в поле packitems в Item. , Цель: у меня есть бутылки с напитками в качестве предметов, и я хочу иметь готовые пакеты с этими напитками. Будет ли мой способ сделать это позже проблемы? Есть ли лучшая практика? Или это уже неправильно?

1 Ответ

2 голосов
/ 12 января 2020

Если я правильно понимаю, вам нужно поле «многие ко многим» с моделью through=… [Django -doc] . Таким образом, мы можем реализовать

class Item(models.Model):
    title = models.CharField(max_length=100)
    price = models.DecimalField(decimal_places=2, max_digits=10)

class Pack(models.Model):
    items = models.ManyToManyField(Item, <b>through='PackItem'</b>)

class <b>PackItem</b>(models.Model):
    item = models.ForeignKey(Item, on_delete=models.CASCADE)
    pack = models.ForeignKey(Pack, on_delete=models.CASCADE)
    quantity = models.IntegerField(default=1)

Здесь мы таким образом указываем, что Pack состоит из набора элементов, но таблица соединений [wiki] будет содержать дополнительный параметр с именем quantity, который указывает, сколько раз мы добавим Item к объекту Pack.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...