python – Django模型 – 字段依赖

我怎么能有字段依赖?

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

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

最佳答案 对于案例1,您可以在模型的清洁方法中轻松验证:

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')

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

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

因此,将类别设为CharField是一个更好的主意,其选择包括“销售”和“租赁”.如果你这样做,那么你也可以使用你的模型的干净方法,就像案例1一样.

点赞