Django如果产品和变体模型都有颜色模型,如何让产品限制变体可以有哪些颜色?

xvw2m8pv  于 2023-03-31  发布在  Go
关注(0)|答案(1)|浏览(138)

我有4个型号,产品,变体和颜色。

class Size(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(unique=True)

class Color(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(unique=True)

class Product(models.Model):
    title = models.CharField(max_length=100)
    description = models.TextField(max_length=400)
    colors = models.ManyToManyField(Color)
    sizes = models.ManyToManyField(Size)

class Variant(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    price = models.DecimalField(decimal_places=2, max_digits=10,
                                validators=[MinValueValidator(Decimal('0.01'))])
    quantity = models.IntegerField(validators=[MinValueValidator(0)])
    color = models.ForeignKey(Color, on_delete=models.CASCADE)
    size = models.ForeignKey(Size, on_delete=models.CASCADE)

在这个例子中,一个变量可以有1个产品,1种颜色和1种尺寸。问题是颜色和尺寸是在商店中的所有颜色和尺寸中选择的。我想将变量中的颜色和尺寸限制为在产品中选择的颜色和尺寸选项。
如果有,请让我知道。谢谢:)

x7yiwoj4

x7yiwoj41#

从逻辑上讲,为了根据您的要求限制条件,您应该覆盖Variant模型的保存方法,并告诉该方法验证颜色和尺寸是否属于要创建的对象中提到的当前产品。

def save(self, *args, **kwargs):
    if self.color not in self.product.colors.all():
        raise ValidationError("Selected color is not valid <OR ANY MESSAGE YOU WANT TO SHOW>")
    if self.size not in self.product.sizes.all():
        raise ValidationError("Selected color is not valid <OR ANY MESSAGE YOU WANT TO SHOW>")            
    super().save(*args, **kwargs)

告诉我有没有用。

相关问题