mirror of
https://github.com/django/django.git
synced 2025-03-24 00:00:45 +00:00
Refs #23622 -- Added tests to ensure ordering is retained for distinct on fields subqueries.
The ticket was already fixed by b68212f539f206679580afbfd008e7d329c9cd31. Thanks to Beauhurst for commissioning the work on this ticket.
This commit is contained in:
parent
6a9a9e50f2
commit
baa732ac9f
@ -3732,3 +3732,71 @@ class TestTicket24605(TestCase):
|
||||
).order_by('pk'),
|
||||
[i1, i2, i3], lambda x: x
|
||||
)
|
||||
|
||||
|
||||
class Ticket23622Tests(TestCase):
|
||||
@skipUnlessDBFeature('can_distinct_on_fields')
|
||||
def test_ticket_23622(self):
|
||||
"""
|
||||
Make sure __pk__in and __in work the same for related fields when
|
||||
using a distinct on subquery.
|
||||
"""
|
||||
a1 = Ticket23605A.objects.create()
|
||||
a2 = Ticket23605A.objects.create()
|
||||
c1 = Ticket23605C.objects.create(field_c0=0.0)
|
||||
Ticket23605B.objects.create(
|
||||
modela_fk=a1, field_b0=123,
|
||||
field_b1=datetime.date(2013, 1, 6),
|
||||
modelc_fk=c1,
|
||||
)
|
||||
Ticket23605B.objects.create(
|
||||
modela_fk=a1, field_b0=23,
|
||||
field_b1=datetime.date(2011, 6, 6),
|
||||
modelc_fk=c1,
|
||||
)
|
||||
Ticket23605B.objects.create(
|
||||
modela_fk=a1, field_b0=234,
|
||||
field_b1=datetime.date(2011, 9, 2),
|
||||
modelc_fk=c1,
|
||||
)
|
||||
Ticket23605B.objects.create(
|
||||
modela_fk=a1, field_b0=12,
|
||||
field_b1=datetime.date(2012, 9, 15),
|
||||
modelc_fk=c1,
|
||||
)
|
||||
Ticket23605B.objects.create(
|
||||
modela_fk=a2, field_b0=567,
|
||||
field_b1=datetime.date(2014, 3, 1),
|
||||
modelc_fk=c1,
|
||||
)
|
||||
Ticket23605B.objects.create(
|
||||
modela_fk=a2, field_b0=76,
|
||||
field_b1=datetime.date(2011, 3, 3),
|
||||
modelc_fk=c1,
|
||||
)
|
||||
Ticket23605B.objects.create(
|
||||
modela_fk=a2, field_b0=7,
|
||||
field_b1=datetime.date(2012, 10, 20),
|
||||
modelc_fk=c1,
|
||||
)
|
||||
Ticket23605B.objects.create(
|
||||
modela_fk=a2, field_b0=56,
|
||||
field_b1=datetime.date(2011, 1, 27),
|
||||
modelc_fk=c1,
|
||||
)
|
||||
qx = (
|
||||
Q(ticket23605b__pk__in=Ticket23605B.objects.order_by('modela_fk', '-field_b1').distinct('modela_fk'))
|
||||
& Q(ticket23605b__field_b0__gte=300)
|
||||
)
|
||||
qy = (
|
||||
Q(ticket23605b__in=Ticket23605B.objects.order_by('modela_fk', '-field_b1').distinct('modela_fk'))
|
||||
& Q(ticket23605b__field_b0__gte=300)
|
||||
)
|
||||
self.assertEqual(
|
||||
set(Ticket23605A.objects.filter(qx).values_list('pk', flat=True)),
|
||||
set(Ticket23605A.objects.filter(qy).values_list('pk', flat=True))
|
||||
)
|
||||
self.assertQuerysetEqual(
|
||||
Ticket23605A.objects.filter(qx),
|
||||
[a2], lambda x: x
|
||||
)
|
||||
|
Loading…
x
Reference in New Issue
Block a user