gpt4 book ai didi

特定字段为 True 时的 Django 唯一性约束

转载 作者:行者123 更新时间:2023-12-04 14:33:19 25 4
gpt4 key购买 nike

我有一个像这样的 Django 模型:

class Process(Place):
isRunning = models.BooleanField(default=True)
name = models.CharField(max_length=20)

我想强制执行 name字段在 isRunning 时是唯一的是真的。

这个约束在 Django 模型中可能吗?

这可能是 this question 的副本,但它没有一个公认的答案,自从被问到之后,Django 发展了很多。

最佳答案

如果您的数据库支持它,您可以设置一个 partial unique index .

A partial index is an index built over a subset of a table; the subset is defined by a conditional expression (called the predicate of the partial index). The index contains entries only for those table rows that satisfy the predicate.



在 2.2 版以下,对此没有特殊的 Django 支持,但您可以在数据迁移中设置它(更多详细信息,请参阅 here)。

在你的情况下,它看起来像:
operations = [
migrations.RunSQL("CREATE UNIQUE INDEX running_name ON app_process(isRunning, name)
WHERE isRunning"),
]

从 2.2 版开始,您可以简单地 declare the partial unique index在您的模型中:
from django.db.models import Q, UniqueConstraint

class Process(Place):
...
class Meta:
constraints = [UniqueConstraint(fields=["name"], condition=Q(isRunning=True))]

关于特定字段为 True 时的 Django 唯一性约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32124186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com