我有一个带有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中使用复杂的自定义表单。
答案 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")