﻿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
32635	System checks for invalid model field names in CheckConstraint.check/UniqueConstraint.condition crash with a reverse 020 relation.	sim1234	Hasan Ramezani	"
== Creating a UniqueConstraint with condition referencing OneToOneField generates invalid SQL

Example: 
{{{
# models.py
from django.db import models

class Model1(models.Model):
    name = models.CharField(max_length=255)

    class Meta:
        constraints = (
            models.UniqueConstraint(
                name=""unique_onetoone"",
                fields=(""name"", ),
                condition=models.Q(model__isnull=True),
            ),
        )

class Model2(models.Model):
    name = models.CharField(max_length=255)
    model = models.OneToOneField(
        Model1, related_name=""model"", on_delete=models.CASCADE
    )


# generated migrations/0001_initial.py
import django.db.models.deletion
from django.db import migrations, models


class Migration(migrations.Migration):
    dependencies = []

    operations = [
        // ... CreateModel, etc ...
        migrations.AddConstraint(
            model_name=""model1"",
            constraint=models.UniqueConstraint(
                name=""unique_onetoone"",
                fields=(""name"", ),
                condition=models.Q(model__isnull=True),
            ),
        ),
    ]
}}}




Running ''manage.py sqlmigrate test 0001'' generates this SQL for creating the unique index and the WHERE clause is completly wrong.


{{{
-- ... CREATE TABLE, etc ...
CREATE UNIQUE INDEX ""unique_onetoone"" ON ""test_model1"" (""name"", ) WHERE ""id"" IS NULL;
}}}


Expected behaviour is receiving ''FieldError(""Joined field references are not permitted in this query"")''. This behaviour is observed when using ''condition=models.Q(model__id__isnull=True)''.

"	Bug	closed	Database layer (models, ORM)	3.2	Release blocker	fixed	UniqueConstraint  OneToOneField	Hasan Ramezani	Ready for checkin	1	0	0	0	0	0
