如何在 django 中使用 Uniqueconstraints 函数创建 unique_together 索引?
Posted
技术标签:
【中文标题】如何在 django 中使用 Uniqueconstraints 函数创建 unique_together 索引?【英文标题】:how to create unique_together index using Uniqueconstraints function in django? 【发布时间】:2020-07-31 06:56:42 【问题描述】:官方文档说:UniqueConstraint 提供了比 unique_together 更多的功能。 unique_together 将来可能会被弃用。 这是我的代码
class Meta:
constraints = [models.UniqueConstraint(fields=['token','obj'], name='hello')]
当我迁移时,它会创建一个带有消息“-在模型 helloWorld 上创建约束 hello”的迁移。但它没有在数据库上创建索引。
【问题讨论】:
您使用的是什么数据库,如何检查是否存在唯一约束也显示迁移内容和这些字段 至少对于 Django 3.2.6 和 SQLite,我可以说实际上有一个名为“sqlite_autoindex__索引是通过另一个Meta
选项完成的:indexes
[Django-doc]:
class MyModel(models.Model):
# …
class Meta:
constraints = [
models.UniqueConstraint(fields=['token','obj'], name='hello')
]
indexes = [
models.Index(fields=('token', 'obj'), condition='TRUE'),
]
这个想法是,一起唯一并不意味着你想索引两者(一起)。此外,您可以通过指定 condition=…
parameter [Django-doc] 来指定要索引字段的条件。
有关详细信息,请参阅model index reference [Django-doc]。
【讨论】:
它没有创建唯一索引。它只是创建一个索引 @Willem 唯一约束的实现方式与数据库级别的索引不同。这意味着添加索引之间没有功能差异 @iklinac 它只是创建一个索引。不是一个不稳定的索引。 @ashleyparker:问题更多:如果您添加唯一约束,PostgreSQL(或任何数据库)是否会创建唯一索引。 iklinac 可能是正确的,这是暗示的。 @willem。如果我使用 unique_together=[fields,......] 它正在创建唯一索引以上是关于如何在 django 中使用 Uniqueconstraints 函数创建 unique_together 索引?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Django Rest Framework 在 Django 中进行操作日志记录