﻿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
32896	Exclude on expressions not being negated as expected	Alex Henman	nobody	"Quite similar to #23797 which looks like it was fixed in 3.2.

Consider the same model definition:

{{{
#!python

from django.db import models

class Rectangle(models.Model):
    length = models.IntegerField(null=True)
    width = models.IntegerField(null=True)
}}}

Then compare the behaviour of excluding when directly accessing the field vs. using an alias or annotation:

{{{
#!python

In [5]: str(Rectangle.objects.exclude(length=123).values(""pk"").query)
Out[5]: 'SELECT ""geometry_rectangle"".""id"" FROM ""geometry_rectangle"" WHERE NOT (""geometry_rectangle"".""length"" = 123 AND ""geometry_rectangle"".""length"" IS NOT NULL)'

In [6]: str(Rectangle.objects.alias(aliased_length=F(""length"")).exclude(aliased_length=123).values(""pk"").query)
Out[6]: 'SELECT ""geometry_rectangle"".""id"" FROM ""geometry_rectangle"" WHERE NOT (""geometry_rectangle"".""length"" = 123)'

In [7]: str(Rectangle.objects.annotate(aliased_length=F(""length"")).exclude(aliased_length=123).values(""pk"").query)
Out[7]: 'SELECT ""geometry_rectangle"".""id"" FROM ""geometry_rectangle"" WHERE NOT (""geometry_rectangle"".""length"" = 123)'
}}}

The expected behaviour would be that when using an alias or annotation, the {{{IS NOT NULL}}} condition would be added when using exclude."	Bug	closed	Database layer (models, ORM)	3.2	Normal	duplicate			Unreviewed	0	0	0	0	0	0
