首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django OneToOneField与db_index=False和OneToOneField

Django OneToOneField与db_index=False和OneToOneField
EN

Stack Overflow用户
提问于 2018-12-12 15:59:34
回答 2查看 870关注 0票数 1

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

因此,unique-constraintunique-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')有什么区别?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-12 16:42:01

OneToOneField意味着unique=True (正如您可以在源代码中显式地看到的那样),unique=True意味着db_index=True,如文档中所指出的:

注意,当uniqueTrue时,不需要指定db_index,因为unique意味着创建索引。

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

请注意,在某些情况下,有一个接受票可以同时允许unique=Truedb_index=False,但这不是其中之一。

票数 4
EN

Stack Overflow用户

发布于 2018-12-12 16:41:19

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

如果您想以其他方式查看正在发生的事情,下面是几个选项:

  1. 您可以在生成的迁移中使用Django命令来查看它将告诉您的数据库做什么
  2. 一旦执行了迁移,就可以检查数据库,查看已经设置了哪些约束/索引。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53746831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档