Fixed #23797 -- Fixed QuerySet.exclude() when rhs is a nullable column.

This commit is contained in:
Jacob Walls 2020-06-27 17:41:32 -04:00 committed by Mariusz Felisiak
parent b7b7df5fbc
commit 512da9d585
4 changed files with 31 additions and 7 deletions

View file

@ -2372,7 +2372,10 @@ class ValuesQuerysetTests(TestCase):
qs = Number.objects.extra(select={'num2': 'num+1'}).annotate(Count('id'))
values = qs.values_list(named=True).first()
self.assertEqual(type(values).__name__, 'Row')
self.assertEqual(values._fields, ('num2', 'id', 'num', 'other_num', 'id__count'))
self.assertEqual(
values._fields,
('num2', 'id', 'num', 'other_num', 'another_num', 'id__count'),
)
self.assertEqual(values.num, 72)
self.assertEqual(values.num2, 73)
self.assertEqual(values.id__count, 1)
@ -2855,6 +2858,18 @@ class ExcludeTests(TestCase):
self.r1.delete()
self.assertFalse(qs.exists())
def test_exclude_nullable_fields(self):
number = Number.objects.create(num=1, other_num=1)
Number.objects.create(num=2, other_num=2, another_num=2)
self.assertSequenceEqual(
Number.objects.exclude(other_num=F('another_num')),
[number],
)
self.assertSequenceEqual(
Number.objects.exclude(num=F('another_num')),
[number],
)
class ExcludeTest17600(TestCase):
"""