Django中的约束:2个外键中只有1个必须为null

时间:2013-07-12 05:36:16

标签: django foreign-keys constraints

我想在两个外键字段上允许null。

但是这两个字段不应该同时为空 实际上,任何时候都必须设置一个。

我该如何表达?

外键引用的两个表不一样。

2 个答案:

答案 0 :(得分:3)

您无法通过在模型字段上添加内容来实现此目的。您必须将此逻辑放在save()

class MyModel(models.Model):
    fk1 = models.ForeignKey(Some, null=True)
    fk2 = models.ForeignKey(Other, null=True)

    def save(self, *args, **kwargs):
       if not fk1 and not fk2:
           raise Exception("You can't leave both fields as null")
       super(self, MyModel).save(*args, **kwargs)

答案 1 :(得分:0)

您可以使用以下方法:

Class TestModel(models.Model):
   forgein_key_1 = models.ForeignKey(YourModel)
   forgein_key_2 = models.ForeignKey(YourOtherModel) 

并将保存方法覆盖为:

    def save(self, *args, **kargs):
        if not (self.forgein_key_1 or self.forgein_key_2):
          raise Exception("Your Custom Exception Message here")
        super(self, TestModel).save(*args, **kargs)