在django模型定义中需要两个字段之一的具体方法

时间:2017-09-18 18:38:43

标签: python django

我的模型field1包含字段field2class MyModel(models.Model): field1 = models.TextField(?) field2 = models.TextField(?) 。我想要求这两个领域中的任何一个。我怎样才能做到这一点?

clean

我正在寻找一种我见过但忘记的特定的最佳实践方法,而不是重写的clean函数方法。我确实记得覆盖某些函数的方法,但我认为它不是{{1}}。

提前致谢

2 个答案:

答案 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])