带有 db_index=False 的 Django OneToOneField

据我所知,OneToOneField将创建一个unique-constraint数据库unique-index来管理unique-constraint内部的唯一值。

结果,unique-constraint将等同于unique-index. (因为都有一张unique-index桌子)

万一models.OneToOneField('one_to_one', db_index=False)呢?

OneToOneField需要unique-index管理,unique-constraint但它告诉不要创建db_index

对我来说似乎很奇怪,但没有任何语法错误。

它是如何工作的?

models.OneToOneField('one_to_one', db_index=False)和之间有什么不同models.OneToOneField('one_to_one')


慕标琳琳
浏览 250回答 2
2回答

富国沪深

OneToOneField暗示unique=True(正如您可以在源代码中明确看到的那样),并unique=True暗示db_index=True,如文档中所述:请注意, when uniqueis True,您不需要指定db_index,因为unique意味着创建索引。所以你db_index=False被默默地忽略了。有人可能会争辩说,在这种情况下应该发出警告。请注意,有一个公认的票同时允许unique=True并db_index=False在某些情况下,但是这不会是他们中的一个。

泛舟湖上清波郎朗

查看OneToOneField的源代码,它将始终UNIQUE在表上设置约束。这将覆盖(悄悄地,显然)db_index您可能设置的任何首选项如果您想通过其他方式查看正在发生的事情,这里有几个选项:您可以在生成的迁移中使用sqlmigrateDjango 命令来查看它会告诉您的数据库做什么执行迁移后,您可以检查数据库以查看已设置的约束/索引
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python