Added test for ArrayField's __contains lookup with subqueries.

This commit is contained in:
Hannes Ljungberg 2020-11-26 09:30:50 +01:00 committed by Mariusz Felisiak
parent aade2b461a
commit 755b327552
1 changed files with 14 additions and 1 deletions

View File

@ -9,7 +9,7 @@ from django.core import checks, exceptions, serializers, validators
from django.core.exceptions import FieldError from django.core.exceptions import FieldError
from django.core.management import call_command from django.core.management import call_command
from django.db import IntegrityError, connection, models from django.db import IntegrityError, connection, models
from django.db.models.expressions import RawSQL from django.db.models.expressions import Exists, OuterRef, RawSQL
from django.db.models.functions import Cast from django.db.models.functions import Cast
from django.test import TransactionTestCase, modify_settings, override_settings from django.test import TransactionTestCase, modify_settings, override_settings
from django.test.utils import isolate_apps from django.test.utils import isolate_apps
@ -313,6 +313,19 @@ class TestQuerying(PostgreSQLTestCase):
self.objs[1:3] self.objs[1:3]
) )
def test_contains_subquery(self):
IntegerArrayModel.objects.create(field=[2, 3])
inner_qs = IntegerArrayModel.objects.values_list('field', flat=True)
self.assertSequenceEqual(
NullableIntegerArrayModel.objects.filter(field__contains=inner_qs[:1]),
self.objs[2:3],
)
inner_qs = IntegerArrayModel.objects.filter(field__contains=OuterRef('field'))
self.assertSequenceEqual(
NullableIntegerArrayModel.objects.filter(Exists(inner_qs)),
self.objs[1:3],
)
def test_icontains(self): def test_icontains(self):
# Using the __icontains lookup with ArrayField is inefficient. # Using the __icontains lookup with ArrayField is inefficient.
instance = CharArrayModel.objects.create(field=['FoO']) instance = CharArrayModel.objects.create(field=['FoO'])