【问题标题】:constraint in Django: exactly 1 of 2 foreign keys has to be nullDjango中的约束:2个外键中的1个必须为空
【发布时间】:2013-07-10 14:10:48
【问题描述】:

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

但是这两个字段不能同时为空。
实际上,必须随时设置一个。

我该如何表达?

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

【问题讨论】:

标签: django foreign-keys constraints


【解决方案1】:

您可以使用以下方法:

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)

【讨论】:

  • 或许解释一下也会有所帮助。
【解决方案2】:

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

【讨论】:

  • 不应该在clean方法中进行验证吗?
猜你喜欢
  • 2022-10-24
  • 2010-09-07
  • 2020-07-29
  • 1970-01-01
  • 1970-01-01
  • 2017-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多