Django模型字段依赖关系

2024-05-17 23:23:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我怎么能有字段依赖?在

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

案例2:如果多对多字段category(值销售租金)有一个值为销售,则必须设置price_sale,否则为空


Tags: 情况salecallprice案例telephonemecategory
2条回答

案例1:

不要这样做,有一个不同的电话号码表,并有一个ForeignKey从人(我假设是一个人)到电话号码。如果每个人有多个电话号码,那么就换一种方式,否则考虑使用OneToOne。在

显然,您希望ForeignKey可以为null。如果只有电话号码的话,只要有电话号码。在

案例2:

我不明白你的数据库设计,所以我不能回答。你得再解释一下-为什么你需要一个ManyToMany?在

对于案例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')

对于案例2,只有在模型被保存之后,M2M关系才会被添加,因此在模型上使用clean在这种情况下是行不通的。但是,您可以从您用来编辑它的任何ModelFormclean方法中执行此操作,无论是在管理员还是您自己的视图中。在

然而,当唯一可能的值是“sale”和“rent”时,将category作为M2M是糟糕的设计。即使这样,“销售”和“租金”也是互斥的,所以M2M无论如何都是不合适的(你的模型永远不会同时经历“销售”和“租金”)。在

因此,将category设为CharField,其中{}由“销售”和“租金”组成。如果您这样做,那么您可以使用模型的clean方法,方法与案例1相同。在

相关问题 更多 >