我有一个模型:
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")