如何在 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__”的自动创建的索引,所以不需要创建额外的索引! 【参考方案1】:

索引是通过另一个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 中使用 $.post?

如何使用 Django Rest Framework 在 Django 中进行操作日志记录

如何在 JavaScript 文件中使用 Django 变量?

[Django] 如何在Django中使用前端工具链

如何在 Django 中使用 memcached?

如何在静态文件中使用 django 模板语法