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

eug*_*ene 5 django constraints foreign-keys

我想允许两个外键字段为空。

但两个字段不能同时为空。
事实上,任何时候都必须准确地设置一个。

我该如何表达这一点呢?

外键引用的两个表不相同。

Aks*_*aaj 5

您无法通过在模型字段上添加某些内容来实现此目的。您必须将此逻辑放入您的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)
Run Code Online (Sandbox Code Playgroud)