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)