据我所知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')
之间有什么区别?
答案 0 :(得分:2)
OneToOneField
表示unique=True
(如您在source code中明确看到的),而unique=True
表示db_index=True
:
请注意,当
unique
为True
时,您无需指定db_index
,因为unique
意味着创建了索引。
因此,您的db_index=False
被静默忽略。有人可能会争辩说,在这种情况下应该提出警告。
请注意,在某些情况下有accepted ticket允许unique=True
和db_index=False
,但这不是其中之一。
答案 1 :(得分:1)
看着source code for OneToOneField,它将始终在表上设置UNIQUE
约束。这会(显然是无声地)覆盖您可能设置的任何db_index
首选项
如果您想通过其他方式查看正在发生的情况,可以使用以下两种选择:
sqlmigrate
Django command来查看它会告诉数据库做什么