Skip to content

Commit

Permalink
Nested order_by path + unittest (#330)
Browse files Browse the repository at this point in the history
  • Loading branch information
sm0k authored and grigi committed Mar 24, 2020
1 parent fc13a19 commit 7a10e27
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 3 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ Changelog
0.15.21
-------
* Fixed invalid ``var IN ()`` SQL generated using ``__in=`` and ``__not_in`` filters.
* Fix bug with order_by on nested fields

0.15.20
------
Expand Down
2 changes: 2 additions & 0 deletions CONTRIBUTORS.rst
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,10 @@ Contributors
* Rebecca Klauser ``@svms1``
* Sina Sohangir ``@sinaso``
* Weiming Dong ``@dongweiming``
* ``@AEnterprise``
* Jinlong Peng ``@long2ice``
* Sang-Heon Jeon ``@lntuition``
* ``@sm0k``

Special Thanks
==============
Expand Down
2 changes: 1 addition & 1 deletion tests/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ attrs==19.3.0 # via black, pytest
babel==2.8.0 # via sphinx
bandit==1.6.2 # via -r requirements.in (line 24)
black==19.10b0 # via -r requirements.in (line 25)
bleach==3.1.1 # via readme-renderer
bleach==3.1.2 # via readme-renderer
blinker==1.4 # via quart
certifi==2019.11.28 # via httpx, requests
cffi==1.14.0 # via cryptography
Expand Down
30 changes: 30 additions & 0 deletions tests/test_order_by_nested.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
from tests.testmodels import Event, Tournament
from tortoise.contrib import test


class TestOrderByNested(test.TestCase):
async def test_basic(self):
await Event.create(
name="Event 1", tournament=await Tournament.create(name="Tournament 1", desc="B")
)
await Event.create(
name="Event 2", tournament=await Tournament.create(name="Tournament 2", desc="A")
)

self.assertEqual(
await Event.all().order_by("-name").values("name"),
[{"name": "Event 2"}, {"name": "Event 1"}],
)

self.assertEqual(
await Event.all().prefetch_related("tournament").values("tournament__desc"),
[{"tournament__desc": "B"}, {"tournament__desc": "A"}],
)

self.assertEqual(
await Event.all()
.prefetch_related("tournament")
.order_by("tournament__desc")
.values("tournament__desc"),
[{"tournament__desc": "A"}, {"tournament__desc": "B"}],
)
5 changes: 3 additions & 2 deletions tortoise/queryset.py
Original file line number Diff line number Diff line change
Expand Up @@ -164,9 +164,10 @@ def resolve_ordering(
annotation_info = annotation.resolve(self.model, table)
self.query = self.query.orderby(annotation_info["field"], order=ordering[1])
else:
field_object = self.model._meta.fields_map.get(field_name)
field_object = model._meta.fields_map.get(field_name)

if not field_object:
raise FieldError(f"Unknown field {field_name} for model {self.model.__name__}")
raise FieldError(f"Unknown field {field_name} for model {model.__name__}")
field_name = field_object.source_field or field_name
field = getattr(table, field_name)

Expand Down

0 comments on commit 7a10e27

Please sign in to comment.