如何检查两个FK中的一个是否为零



我有一个模型:

class MyModel(models.Model):
    field_1 = models.ForeignKey(FirstModel)
    field_2 = models.ForeignKey(SecondModel)

我想显示一个表单,其中两个字段,但只能同时设置一个字段,否则验证返回错误。

怎么做(最好是在模型中)?

class MyModel(models.Model):
    field_1 = models.ForeignKey(FirstModel)
    field_2 = models.ForeignKey(SecondModel)
    def clean(self):
      num = filter(lambda e:e,[self.field_1, self.field_2])
      if len(num) != 1:
         raise ValidationError("only one attribute should be set")

如果你问我,我认为这是一个更干净的解决方案:

class MyModel(models.Model):
    field_1 = models.ForeignKey(FirstModel)
    field_2 = models.ForeignKey(SecondModel)
    def clean(self):
      if not bool(field_1) ^ bool(field_2): # Using python exclusive-or (^)
         raise ValidationError("Only one attribute should be set")

相关内容

最新更新