Django模型 - 字段依赖

RS7*_*RS7 3 python django validation model

我怎么能有字段依赖?

情况1:如果call_me设置了布尔字段,则telephone必须设置,否则它应该为空

案例2:如果多个到多个字段category(具有值销售,租金)具有作为销售的值之一,则price_sale必须设置,否则它应该为空

Chr*_*att 6

对于案例1,您可以在模型的clean方法中轻松验证:

from django.core.exceptions import ValidationError

class MyModel(models.Model):
     ...
     def clean(self):
         if self.call_me and not self.telephone.strip():
             raise ValidationError('Telephone is required')
Run Code Online (Sandbox Code Playgroud)

对于案例2,保存模型之前不会添加M2M关系,因此clean在此模型中使用模型将不起作用.但是,您可以使用clean任何ModelForm用于编辑此方法的方法执行此操作,无论是在管理员还是您自己的视图中.

然而,category当唯一可能的值是"销售"和"租赁"时,作为M2M,是糟糕的设计.即便如此,"销售"和"租赁"是相互排斥的,因此无论如何M2M都是不合适的(您的模型将不会同时经历"销售"和"租赁").

其结果是,这将是一个更好的主意,有categoryCharFieldchoices由"出售"和"租金"的.如果你这样做,那么你也可以clean像案例1一样使用模型的方法.