Skip to content

Commit 0c522c8

Browse files
authored
fix: search filter by several fields (#54)
1 parent 4d93e8b commit 0c522c8

1 file changed

Lines changed: 11 additions & 5 deletions

File tree

fastadmin/models/orms/tortoise.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
1+
import functools
2+
import operator
13
from typing import Any
24
from uuid import UUID
35

6+
from tortoise.expressions import Q
7+
48
from fastadmin.models.base import InlineModelAdmin, ModelAdmin
59
from fastadmin.models.schemas import ModelFieldWidgetSchema, WidgetType
610
from fastadmin.settings import settings
@@ -244,11 +248,13 @@ async def orm_get_list(
244248
qs = qs.filter(**{f"{field}__{condition}" if condition != "exact" else field: value})
245249

246250
if search and self.search_fields:
247-
ids = []
248-
for f in self.search_fields:
249-
qs = qs.filter(**{f + "__icontains": search})
250-
ids += await qs.values_list(self.get_model_pk_name(self.model_cls), flat=True)
251-
qs = qs.filter(id__in=set(ids))
251+
qs = qs.filter(
252+
functools.reduce(
253+
operator.or_,
254+
(Q(**{f + "__icontains": search}) for f in self.search_fields),
255+
Q(),
256+
)
257+
)
252258

253259
if sort_by:
254260
qs = qs.order_by(sort_by)

0 commit comments

Comments
 (0)