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 по отношению к каждому продукту (мета-свойство).

Теперь в представлениях проверьте, доступен ли размер продукта для данного продукта или нет. Если размер товара отсутствует, выполните создание или обновите количество.

Вернуться на верх