验证外键,只有一个具有非空值

时间:2018-04-10 16:37:20

标签: django django-models

我有一个带有2个FK键的模型

class C(models.Model):
    a1 = models.ForeignKey(A, blank=True, null=True, related_name='c', on_delete=models.CASCADE)
    a2 = models.ForeignKey(B, blank=True, null=True, related_name='c', on_delete=models.CASCADE)

保存模型时,我希望FK存在,另一个为null。如果不是这种情况,则提出验证。

因为我在Django Admin中也需要它,所以我更喜欢在模型中完成,以避免在Django Admin中使用复杂的自定义表单。

1 个答案:

答案 0 :(得分:1)

为您的模型编写clean方法。

from django.core.exceptions import ValidationError

class C(models.Model):
    ...
    def clean(self):
        if self.a1_id and self.a2_id:
            raise ValidationError("You can only select one")
        elif not (self.a1_id or self.a2_id):
            raise ValidationError("You must select one")