首页 > 解决方案 > Django 3 CheckConstraints m2m 字段

问题描述

我想将数据库约束添加到我的模型中,这要求至少其中一个字段不为空。检查 m2m 字段时,我收到 FieldError: Cannot resolve keyword '' into field。

是否可以创建这样的约束?

示例代码:

class A(Model):
    id = AutoField()
    url = ManyToManyField(Url, blank=True)
    description = TextField(null=True, blank=True)

    class Meta:
        constraints = [CheckConstraints(
            check=(Q(description__isnull=False) | Q(url__isnull=False))),
            name="someName"
        )]

标签: djangodjango-modelsdjango-rest-framework

解决方案


使用 CheckConstraint 功能无法实现此目的。Django 将所有 ORM 命令转换为低级 DB 特定命令,即使在 DB 级别也无法创建此类约束。事实上,我们可以将 CheckConstraint 应用于仅添加/更新的单行。

在此处查看完整答案: https ://stackoverflow.com/a/60799459/15090285


推荐阅读