Skip to content

Commit b19cc0d

Browse files
fix bug with mixed relation search
1 parent a69f4b9 commit b19cc0d

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

fastapi_sa_orm_filter/sa_expression_builder.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,15 @@ def __init__(self, model: type[DeclarativeBase]) -> None:
2020
self._model_serializers = self.create_pydantic_serializers()
2121

2222
def get_expressions(self, parsed_filters) -> list[BinaryExpression]:
23-
model = self.model
24-
table = self.model.__tablename__
2523

2624
or_expr = []
2725

2826
for and_parsed_filter in parsed_filters:
2927
and_expr = []
3028
for and_filter in and_parsed_filter:
29+
model = self.model
30+
table = self.model.__tablename__
31+
3132
if and_filter.has_relation:
3233
model = self.get_relation_model(and_filter.relation)
3334
table = model.__tablename__

tests/test_join_filter.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,15 @@ async def test_reverse_relation(session, get_vacancy_filter_with_join, create_va
6969
vacancy = vacancies[0]
7070
assert vacancy.id == 1
7171
assert vacancy.company_id == 1
72+
73+
async def test_relation_mixed_search(session, get_custom_company_filter, create_vacancies):
74+
query = get_custom_company_filter.get_query("title__eq=MyCompany2&vacancies.salary_from__gte=100&id__eq=2")
75+
res = await session.execute(query)
76+
companies = res.unique().scalars().all()
77+
78+
assert len(companies) == 1
79+
assert len(companies[0].vacancies) == 6
80+
81+
company = companies[0]
82+
assert company.id == 2
83+
assert company.title == "MyCompany2"

0 commit comments

Comments
 (0)