mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Fixed #24747 -- Allowed transforms in QuerySet.order_by() and distinct(*fields).
This commit is contained in:
committed by
Tim Graham
parent
bf26f66029
commit
2162f0983d
@@ -309,6 +309,22 @@ class TestQuerying(PostgreSQLTestCase):
|
||||
self.objs[2:3]
|
||||
)
|
||||
|
||||
def test_order_by_slice(self):
|
||||
more_objs = (
|
||||
NullableIntegerArrayModel.objects.create(field=[1, 637]),
|
||||
NullableIntegerArrayModel.objects.create(field=[2, 1]),
|
||||
NullableIntegerArrayModel.objects.create(field=[3, -98123]),
|
||||
NullableIntegerArrayModel.objects.create(field=[4, 2]),
|
||||
)
|
||||
self.assertSequenceEqual(
|
||||
NullableIntegerArrayModel.objects.order_by('field__1'),
|
||||
[
|
||||
more_objs[2], more_objs[1], more_objs[3], self.objs[2],
|
||||
self.objs[3], more_objs[0], self.objs[4], self.objs[1],
|
||||
self.objs[0],
|
||||
]
|
||||
)
|
||||
|
||||
@unittest.expectedFailure
|
||||
def test_slice_nested(self):
|
||||
instance = NestedIntegerArrayModel.objects.create(field=[[1, 2], [3, 4]])
|
||||
|
||||
@@ -148,6 +148,18 @@ class TestQuerying(HStoreTestCase):
|
||||
self.objs[:2]
|
||||
)
|
||||
|
||||
def test_order_by_field(self):
|
||||
more_objs = (
|
||||
HStoreModel.objects.create(field={'g': '637'}),
|
||||
HStoreModel.objects.create(field={'g': '002'}),
|
||||
HStoreModel.objects.create(field={'g': '042'}),
|
||||
HStoreModel.objects.create(field={'g': '981'}),
|
||||
)
|
||||
self.assertSequenceEqual(
|
||||
HStoreModel.objects.filter(field__has_key='g').order_by('field__g'),
|
||||
[more_objs[1], more_objs[2], more_objs[0], more_objs[3]]
|
||||
)
|
||||
|
||||
def test_keys_contains(self):
|
||||
self.assertSequenceEqual(
|
||||
HStoreModel.objects.filter(field__keys__contains=['a']),
|
||||
|
||||
@@ -141,6 +141,31 @@ class TestQuerying(PostgreSQLTestCase):
|
||||
[self.objs[0]]
|
||||
)
|
||||
|
||||
def test_ordering_by_transform(self):
|
||||
objs = [
|
||||
JSONModel.objects.create(field={'ord': 93, 'name': 'bar'}),
|
||||
JSONModel.objects.create(field={'ord': 22.1, 'name': 'foo'}),
|
||||
JSONModel.objects.create(field={'ord': -1, 'name': 'baz'}),
|
||||
JSONModel.objects.create(field={'ord': 21.931902, 'name': 'spam'}),
|
||||
JSONModel.objects.create(field={'ord': -100291029, 'name': 'eggs'}),
|
||||
]
|
||||
query = JSONModel.objects.filter(field__name__isnull=False).order_by('field__ord')
|
||||
self.assertSequenceEqual(query, [objs[4], objs[2], objs[3], objs[1], objs[0]])
|
||||
|
||||
def test_deep_values(self):
|
||||
query = JSONModel.objects.values_list('field__k__l')
|
||||
self.assertSequenceEqual(
|
||||
query,
|
||||
[
|
||||
(None,), (None,), (None,), (None,), (None,), (None,),
|
||||
(None,), (None,), ('m',), (None,), (None,), (None,),
|
||||
]
|
||||
)
|
||||
|
||||
def test_deep_distinct(self):
|
||||
query = JSONModel.objects.distinct('field__k__l').values_list('field__k__l')
|
||||
self.assertSequenceEqual(query, [('m',), (None,)])
|
||||
|
||||
def test_isnull_key(self):
|
||||
# key__isnull works the same as has_key='key'.
|
||||
self.assertSequenceEqual(
|
||||
|
||||
Reference in New Issue
Block a user