Skip to content

Commit 53224de

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

File tree

4 files changed

+18
-4
lines changed

4 files changed

+18
-4
lines changed

fastapi_sa_orm_filter/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from fastapi_sa_orm_filter.main import FilterCore # noqa
33
from fastapi_sa_orm_filter.operators import Operators as ops # noqa
44

5-
__version__ = "0.2.3"
5+
__version__ = "0.2.4"
66

77
from .main import FilterCore as FilterCore # noqa
88
from .operators import Operators as Operators # noqa

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__

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "fastapi-sqlalchemy-filters"
3-
version = "0.2.3"
3+
version = "0.2.4"
44
description = ""
55
authors = ["Alexandr Zhydyk <zhydykalex@ukr.net>"]
66
readme = "README.md"

tests/test_join_filter.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,16 @@ 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+
74+
async def test_relation_mixed_search(session, get_custom_company_filter, create_vacancies):
75+
query = get_custom_company_filter.get_query("title__eq=MyCompany2&vacancies.salary_from__gte=100&id__eq=2")
76+
res = await session.execute(query)
77+
companies = res.unique().scalars().all()
78+
79+
assert len(companies) == 1
80+
assert len(companies[0].vacancies) == 6
81+
82+
company = companies[0]
83+
assert company.id == 2
84+
assert company.title == "MyCompany2"

0 commit comments

Comments
 (0)