Skip to content

Commit 0663fb3

Browse files
committed
fix: added getitem method to relation proxy model
1 parent 7330d56 commit 0663fb3

2 files changed

Lines changed: 33 additions & 14 deletions

File tree

ormar/relations/relation_proxy.py

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,13 @@
1-
from typing import Any, Generic, List, Optional, TYPE_CHECKING, Type, TypeVar
1+
from typing import (
2+
Any,
3+
Generic,
4+
List,
5+
Optional,
6+
TYPE_CHECKING,
7+
Type,
8+
TypeVar,
9+
Union,
10+
)
211

312
import ormar
413
from ormar.exceptions import NoMatch, RelationshipInstanceError
@@ -52,8 +61,18 @@ def related_field_name(self) -> str:
5261

5362
return self._related_field_name
5463

55-
def __getitem__(self, item: Any) -> "T": # type: ignore
56-
return super().__getitem__(item)
64+
def __getitem__(self, key: Union[int, slice]) -> "QuerysetProxy[T]":
65+
"""
66+
You can slice the results to desired number of parent models.
67+
68+
Actual call delegated to QuerySet.
69+
70+
:param key: numbers of models to slicing
71+
:type key: int | slice
72+
:return: QuerysetProxy
73+
:rtype: QuerysetProxy
74+
"""
75+
return self.queryset_proxy[key]
5776

5877
def __getattribute__(self, item: str) -> Any:
5978
"""

tests/test_queries/test_pagination.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -180,16 +180,16 @@ async def test_slice_getitem_queryset_on_proxy():
180180
c = await Car(name=f"{i}").save()
181181
await user.cars.add(c)
182182

183-
cars_page1 = user.cars[:5]
184-
assert len(cars_page1) == 5
185-
assert cars_page1[0].name == "0"
186-
assert cars_page1[4].name == "4"
183+
await user.cars[:5].all()
184+
assert len(user.cars) == 5
185+
assert user.cars[0].name == "0"
186+
assert user.cars[4].name == "4"
187187

188-
cars_page2 = user.cars[5:10]
189-
assert len(cars_page2) == 5
190-
assert cars_page2[0].name == "5"
191-
assert cars_page2[4].name == "9"
188+
await user.cars[5:10].all()
189+
assert len(user.cars) == 5
190+
assert user.cars[0].name == "5"
191+
assert user.cars[4].name == "9"
192192

193-
cars_page3 = user.cars[10:]
194-
assert len(cars_page3) == 10
195-
assert cars_page3[0].name == "10"
193+
await user.cars[10:].all()
194+
assert len(user.cars) == 10
195+
assert user.cars[0].name == "10"

0 commit comments

Comments
 (0)