我的模型field1
包含字段field2
和class MyModel(models.Model):
field1 = models.TextField(?)
field2 = models.TextField(?)
。我想要求这两个领域中的任何一个。我怎样才能做到这一点?
clean
我正在寻找一种我见过但忘记的特定的最佳实践方法,而不是重写的clean
函数方法。我确实记得覆盖某些函数的方法,但我认为它不是{{1}}。
提前致谢
答案 0 :(得分:6)
这是一个老问题,但由于这是我搜索“django 模型字段需要两个中的一个”时的第一次命中,我应该指出,虽然覆盖 clean()
可能是一个很好的做法3 年前,Django 对 Meta
类中的数据库约束定义的支持是当今更好的选择。 This tutorial 让我走上了正确的道路,但这里有一个来自我们模型的代码示例:
class MyModel:
thing1 = models.PositiveIntegerField(null=True)
thing2 = models.PositiveIntegerField(null=True)
class Meta:
constraints = [
models.CheckConstraint(
name="%(app_label)s_%(class)s_thing1_or_thing2",
check=(
models.Q(thing1__isnull=True, thing2__isnull=False)
| models.Q(thing1__isnull=False, thing2__isnull=True)
),
)
]
答案 1 :(得分:2)
评论使用清洁
sc.parallelize(Seq.emtpy[T])