﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
33137	Decouple Field.unique from select_related	Markus Holtermann	nobody	"When inheriting from a `OneToOneField` that automatically adds additional constraints to a model, the object-level relation might be a one-to-one relation, while the underlying implementation is still a many-to-one.

Let's say you have two models `A` and `B` where `A.rel = MyOneToOneField(B)` and `A.deleted = BooleanField()`. In a regular `OneToOneField` there would now be a unique index on `A.rel`. However, by adding a unique constraint to `A._meta.constraints` over `rel` with a condition on `deleted=False`, `rel` only needs to be unique among the ""undeleted"" objects. Doing so is possible by forcing `MyOneToOneField.unique=False` (otherwise migrations create a constraint). However, this will mean, `SQLCompiler.get_related_selections()` fails when trying to do `B.objects.select_related(""a"")`, since `a` is not a valid field. That is because `SQLCompiler.get_related_selections._get_field_choices()` uses `f.field.unique` instead of `(f.field.many_to_one or f.field.one_to_one)`, I think. Because, essentially, `opts.related_objects` is build based on those `(many|one)_to_(many|one)` field attributes."	New feature	new	Database layer (models, ORM)		Normal				Unreviewed	0	0	0	0	0	0
