mirror of
https://github.com/django/django.git
synced 2025-07-24 05:36:15 +00:00
Fixed #24060 -- Added OrderBy Expressions
This commit is contained in:
parent
f48e2258a9
commit
21b858cb67
9 changed files with 310 additions and 54 deletions
|
@ -3,6 +3,7 @@ from __future__ import unicode_literals
|
|||
from datetime import datetime
|
||||
from operator import attrgetter
|
||||
|
||||
from django.db.models import F
|
||||
from django.test import TestCase
|
||||
|
||||
from .models import Article, Author
|
||||
|
@ -203,3 +204,64 @@ class OrderingTests(TestCase):
|
|||
],
|
||||
attrgetter("headline")
|
||||
)
|
||||
|
||||
def test_order_by_f_expression(self):
|
||||
self.assertQuerysetEqual(
|
||||
Article.objects.order_by(F('headline')), [
|
||||
"Article 1",
|
||||
"Article 2",
|
||||
"Article 3",
|
||||
"Article 4",
|
||||
],
|
||||
attrgetter("headline")
|
||||
)
|
||||
self.assertQuerysetEqual(
|
||||
Article.objects.order_by(F('headline').asc()), [
|
||||
"Article 1",
|
||||
"Article 2",
|
||||
"Article 3",
|
||||
"Article 4",
|
||||
],
|
||||
attrgetter("headline")
|
||||
)
|
||||
self.assertQuerysetEqual(
|
||||
Article.objects.order_by(F('headline').desc()), [
|
||||
"Article 4",
|
||||
"Article 3",
|
||||
"Article 2",
|
||||
"Article 1",
|
||||
],
|
||||
attrgetter("headline")
|
||||
)
|
||||
|
||||
def test_order_by_f_expression_duplicates(self):
|
||||
"""
|
||||
A column may only be included once (the first occurrence) so we check
|
||||
to ensure there are no duplicates by inspecting the SQL.
|
||||
"""
|
||||
qs = Article.objects.order_by(F('headline').asc(), F('headline').desc())
|
||||
sql = str(qs.query).upper()
|
||||
fragment = sql[sql.find('ORDER BY'):]
|
||||
self.assertEqual(fragment.count('HEADLINE'), 1)
|
||||
self.assertQuerysetEqual(
|
||||
qs, [
|
||||
"Article 1",
|
||||
"Article 2",
|
||||
"Article 3",
|
||||
"Article 4",
|
||||
],
|
||||
attrgetter("headline")
|
||||
)
|
||||
qs = Article.objects.order_by(F('headline').desc(), F('headline').asc())
|
||||
sql = str(qs.query).upper()
|
||||
fragment = sql[sql.find('ORDER BY'):]
|
||||
self.assertEqual(fragment.count('HEADLINE'), 1)
|
||||
self.assertQuerysetEqual(
|
||||
qs, [
|
||||
"Article 4",
|
||||
"Article 3",
|
||||
"Article 2",
|
||||
"Article 1",
|
||||
],
|
||||
attrgetter("headline")
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue