mirror of
https://github.com/django/django.git
synced 2025-09-26 12:09:19 +00:00
Fixed #29538 -- Fixed crash of ordering by related fields when Meta.ordering contains expressions.
Thanks Simon Charette for the review.
This commit is contained in:
parent
34e2148fc7
commit
2798c937de
4 changed files with 74 additions and 3 deletions
|
@ -14,7 +14,16 @@ from django.db.models import (
|
|||
from django.db.models.functions import Upper
|
||||
from django.test import TestCase
|
||||
|
||||
from .models import Article, Author, ChildArticle, OrderedByFArticle, Reference
|
||||
from .models import (
|
||||
Article,
|
||||
Author,
|
||||
ChildArticle,
|
||||
OrderedByExpression,
|
||||
OrderedByExpressionChild,
|
||||
OrderedByExpressionGrandChild,
|
||||
OrderedByFArticle,
|
||||
Reference,
|
||||
)
|
||||
|
||||
|
||||
class OrderingTests(TestCase):
|
||||
|
@ -550,3 +559,30 @@ class OrderingTests(TestCase):
|
|||
{"author": self.author_2.pk, "count": 1},
|
||||
],
|
||||
)
|
||||
|
||||
def test_order_by_parent_fk_with_expression_in_default_ordering(self):
|
||||
p3 = OrderedByExpression.objects.create(name="oBJ 3")
|
||||
p2 = OrderedByExpression.objects.create(name="OBJ 2")
|
||||
p1 = OrderedByExpression.objects.create(name="obj 1")
|
||||
c3 = OrderedByExpressionChild.objects.create(parent=p3)
|
||||
c2 = OrderedByExpressionChild.objects.create(parent=p2)
|
||||
c1 = OrderedByExpressionChild.objects.create(parent=p1)
|
||||
self.assertSequenceEqual(
|
||||
OrderedByExpressionChild.objects.order_by("parent"),
|
||||
[c1, c2, c3],
|
||||
)
|
||||
|
||||
def test_order_by_grandparent_fk_with_expression_in_default_ordering(self):
|
||||
p3 = OrderedByExpression.objects.create(name="oBJ 3")
|
||||
p2 = OrderedByExpression.objects.create(name="OBJ 2")
|
||||
p1 = OrderedByExpression.objects.create(name="obj 1")
|
||||
c3 = OrderedByExpressionChild.objects.create(parent=p3)
|
||||
c2 = OrderedByExpressionChild.objects.create(parent=p2)
|
||||
c1 = OrderedByExpressionChild.objects.create(parent=p1)
|
||||
g3 = OrderedByExpressionGrandChild.objects.create(parent=c3)
|
||||
g2 = OrderedByExpressionGrandChild.objects.create(parent=c2)
|
||||
g1 = OrderedByExpressionGrandChild.objects.create(parent=c1)
|
||||
self.assertSequenceEqual(
|
||||
OrderedByExpressionGrandChild.objects.order_by("parent"),
|
||||
[g1, g2, g3],
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue