2

我如何向 Django 模型添加规则,使某些默认情况下不需要的字段,如果设置了另一个字段则需要。甚至反过来

假设我有这个模型:

class Item(models.Model):

    name = models.CharField(max_length = 75)
    cant_be_sold = models.BooleanField()
    flat_price = models.IntegerField(blank = True, null = True, default = None, validators = [MinValueValidator(0)])
    defense = models.IntegerField(blank = True, null = True, default = None, validators = [MinValueValidator(0)])
    required_classes = models.ManyToManyField('otherappname.Class', related_name = 'Requires_Classes', blank = True, null = True, default = None)

假设这里可能有两种情况;

  1. 我标记cant_be_soldTrue; 现在 flat_price 只能是None( NULL)
  2. 我填写defense;现在需要选择一个或多个required_classes

我想知道在 Django 中执行此操作的好方法是什么。将帮助我防止错误输入,因为我的 Item 模型有 70 多个属性字段,因为我的系统中的 Item Variances 的扩展很大。

4

1 回答 1

4

为你的模型写一个clean方法。在其中,您可以更改字段值并引发验证错误。以下示例应该可以帮助您入门。

def clean(self):
    if self.cant_be_sold and self.flat_price is not None:
        raise ValidationError("flat_price must be None when cant_be_sold is True")
于 2013-07-20T13:34:36.860 回答