Задать вопрос
@satioidou2se

Как переопределить метод save в модели с полем ManyToMany?

Есть модель
class Payment(models.Model):
    order = models.ManyToManyField(TicketPay, verbose_name="Заказ", blank=True, default=None)
    ticket = models.ForeignKey(Ticket, verbose_name="Билет", blank=True, default=1, null=True,
                               on_delete=models.SET_NULL)
    nmb = models.IntegerField("Количество", default=1)
    price_per_item = models.DecimalField("Стоимость", default=0, max_digits=10, decimal_places=2)
    total_price = models.DecimalField("Сумма", default=0, max_digits=10, decimal_places=2)  # price*nmb
    created = models.DateTimeField("Создано", auto_now_add=True, auto_now=False)
    updated = models.DateTimeField("Обновлено", auto_now_add=False, auto_now=True)

    def __str__(self):
        return "%s Билета(ов). В сумме %s RUB" % (self.nmb, int(self.total_price))

    class Meta:
        verbose_name = "Билет в заказе"
        verbose_name_plural = "Билеты в заказе"

    def save(self, *args, **kwargs):
        price_per_item = self.ticket.price
        self.price_per_item = price_per_item

        self.nmb = self.order.count()
        self.total_price = int(self.nmb) * price_per_item

        super(Payment, self).save(*args, **kwargs)

Нужно, чтобы при выборе какого-либо количества TicketPay в поле order и билета в поле ticket и последующем сохранении автоматически добавлялась информация в поля price_per_item(это работает), nmb(при сохранении выскакивает ошибка "Payment: 1 Билета(ов). В сумме 0 RUB" needs to have a value for field "id" before this many-to-many relationship can be used.") и total_price(это тоже работает с ввёденным nmb)
Посмотрел на форумах, говорят, что нужно сохранить поле ManyToMany методом .save, чтобы такой ошибки не выскакивало.
Вопрос, как это сделать?
  • Вопрос задан
  • 190 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы