Django не создает новый экземпляр поля многие-ко-многим, если его поле уже существует в базе данных, вместо этого увеличивается другое поле

У меня есть следующие классы в моем Models.py (удалены несвязанные поля & классы)

class Size(models.Model):
    prod_size = models.DecimalField(max_digits=3, decimal_places=1)
    quantity = models.IntegerField(default=1)

class Product(models.Model):
    sizes = models.ManyToManyField(Size, related_name='products')

В настоящее время, если я захожу в существующий продукт из django admin и добавляю новый размер к существующему продукту с существующим значением prod_size (т.е. prod_size = 8.5 с product_id = 4 в промежуточной таблице), создается новый объект Size (с его новым size_id и product_id = 4 в промежуточной таблице) и prod_size = 8.5 с quantity = 1 в таблице Size. Я бы хотел увеличить поле quantity существующего объекта Size на единицу в базе данных, как я могу этого добиться?

Просто переопределите метод сохранения следующим образом:

django.db.models import F

class Size(models.Model):
    prod_size = models.DecimalField(max_digits=3, decimal_places=1)
    quantity = models.IntegerField(default=1)

    def save(self, *args, **kwargs):
        size_exists = Size.objects.filter(
             prod_size=self.prod_size, product_id=self.product_id
        ).exists()
        if size_exists:
           Size.objects.filter(
               prod_size=self.prod_size, product_id=self.product_id
           ).update(quantity=F('quantity')+1)
        else:
           super(Size, self).save(*args, **kwargs)
   
Вернуться на верх