如何获得字段依赖关系?Django模型 - 字段依赖关系
案例1:如果布尔场call_me
设置,然后telephone
必须设置,否则它应该是空白
案例2:如果多对多场category
(其值销售,租金)有该值销售之一,那么price_sale
必须设置,否则它应该是空白
如何获得字段依赖关系?Django模型 - 字段依赖关系
案例1:如果布尔场call_me
设置,然后telephone
必须设置,否则它应该是空白
案例2:如果多对多场category
(其值销售,租金)有该值销售之一,那么price_sale
必须设置,否则它应该是空白
对于案例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
你的模式不会在这种情况下工作。但是,您可以使用任何ModelForm
的clean
方法来编辑此操作,无论是在管理员还是您自己的视图中。
但是,有category
作为M2M时唯一可能的值是“sale”和“rent”,是差的设计。即使这样,“销售”和“租金”是互相排斥的,所以M2M是不合适的(您的模型将不会同时出现“销售”和“租金”)。
因此,将category
作为CharField
与choices
组成“销售”和“租金”将是一个更好的主意。如果你这样做,那么你可以使用你的模型的clean
方法,就像情况1一样。
感谢您的回复 - 对于案例2,“类别”可以是销售,出租和/或假期,所以我猜我需要拥有连接表。我如何在M2M领域至少需要一行?情况2的依赖情况如何? (我对Python/Django很新颖) – RS7 2012-03-05 19:03:15
案例1:
不要那样做,有电话号码的不同的表,并有从人一ForeignKey
(我假设它是一个人)的电话号码。如果您每人有多个电话号码,请反过来,否则请考虑使用OneToOne
。
很显然你会希望ForeignKey
为空。这样,拥有电话号码的唯一方法就是该人提供了一个电话号码。
案例2:
这里我就不明白你的数据库设计,所以我不能回答。你必须解释更多 - 为什么你需要在这里ManyToMany
?
听起来像你有你的模型布局严重。尝试规范化你的数据库模式。 – cha0site 2012-03-05 14:38:29
它的哪部分看起来不正确? – RS7 2012-03-05 19:08:55