我如何向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)
假设这里可能有两种情况;
cant_be_sold
标记为True
;现在flat_price只能是None
(NULL
)defense
;现在需要选择一个或多个required_classes
我想知道在Django中这样做的好方法是什么。由于我的系统中的项目差异有很大的扩展,因此我的项目模型有超过70个属性字段,可以帮助我防止错误输入。
答案 0 :(得分: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")