Django many-to-many переопределяет метод сохранения для увеличения поля вместо создания новых объектов
У меня есть следующие классы в моем Models.py:
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)
class Product(models.Model):
sizes = models.ManyToManyField(Size, related_name='products')
Я хочу, чтобы метод сохранения обновлял поле количества Size, если уже существует prod_size с тем же значением и связанный с тем же product_id. Но у меня возникают проблемы с получением информации о product_id из промежуточной таблицы. Есть ли какой-нибудь способ добиться этого?
Лучшим способом сделать это является -
class Product(models.Model):
product_code = models.charfield(unique=True)
class Size(models.Model):
product = models.ForeignKey(Product)
prod_size = models.DecimalField(max_digits=3, decimal_places=1)
quantity = models.IntegerField(default=1)
class Meta:
unique_together = (
("product ", 'prod_size '),
)
Теперь размеры привязаны к каждому продукту, что означает, что для продукта можно иметь много размеров, а также в моделях размеров нельзя иметь дубликаты product_size по отношению к каждому продукту (мета-свойство).
Теперь в представлениях проверьте, доступен ли размер продукта для данного продукта или нет. Если размер товара отсутствует, выполните создание или обновите количество.