为了账号安全,请及时绑定邮箱和手机立即绑定

带有 db_index=False 的 Django OneToOneField

带有 db_index=False 的 Django OneToOneField

慕标琳琳 2021-09-14 21:14:33
据我所知,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')?
查看完整描述

2 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

OneToOneField暗示unique=True(正如您可以在源代码中明确看到的那样),并unique=True暗示db_index=True,如文档中所述:

请注意, when uniqueis True,您不需要指定db_index,因为unique意味着创建索引。

所以你db_index=False被默默地忽略了。有人可能会争辩说,在这种情况下应该发出警告。

请注意,有一个公认的票同时允许unique=Truedb_index=False在某些情况下,但是这不会是他们中的一个。


查看完整回答
反对 回复 2021-09-14
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

查看OneToOneField源代码,它将始终UNIQUE在表上设置约束。这将覆盖(悄悄地,显然)db_index您可能设置的任何首选项

如果您想通过其他方式查看正在发生的事情,这里有几个选项:

  1. 您可以在生成的迁移中使用sqlmigrateDjango 命令来查看它会告诉您的数据库做什么

  2. 执行迁移后,您可以检查数据库以查看已设置的约束/索引


查看完整回答
反对 回复 2021-09-14
  • 2 回答
  • 0 关注
  • 246 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信