我有一个像这样的 Django 模型:
class Process(Place):
isRunning = models.BooleanField(default=True)
name = models.CharField(max_length=20)
Run Code Online (Sandbox Code Playgroud)
我想强制该name字段在isRunning为真时是唯一的。
这个约束在 Django 模型中可能吗?
Kev*_*nry 13
如果您的数据库支持它,您可以设置一个部分唯一索引。
部分索引是建立在表子集上的索引;子集由条件表达式(称为部分索引的谓词)定义。该索引仅包含满足谓词的那些表行的条目。
在 2.2 版以下,对此没有特殊的 Django 支持,但您可以在数据迁移中进行设置(有关更多详细信息,请参见此处)。
在你的情况下,它看起来像:
operations = [
migrations.RunSQL("CREATE UNIQUE INDEX running_name ON app_process(isRunning, name)
WHERE isRunning"),
]
Run Code Online (Sandbox Code Playgroud)
从 2.2 版开始,您可以简单地在模型中声明部分唯一索引:
from django.db.models import Q, UniqueConstraint
class Process(Place):
...
class Meta:
constraints = [UniqueConstraint(fields=["name"], condition=Q(isRunning=True))]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2469 次 |
| 最近记录: |