@@ -253,8 +253,11 @@ async def get_selects(
253253 pk : Optional [str ],
254254 perPage : Optional [int ],
255255 page : Optional [int ],
256+ filter : Any = None
256257 ) -> List [dict ]:
257- ...
258+ """
259+ 多对多或多对一的时候,用于选择项的读取
260+ """
258261
259262
260263class ForeignKeyPickerControl (BaseAdminControl , RelationSelectApi ): # todo 支持搜索功能
@@ -271,8 +274,14 @@ async def get_selects(
271274 pk : Optional [str ],
272275 perPage : Optional [int ],
273276 page : Optional [int ],
277+ filter : Any = None
274278 ):
275279 field_model_all = self ._field .related_model .all () # type: ignore
280+ if filter :
281+ if isinstance (filter , dict ):
282+ field_model_all = self ._field .related_model .filter (** filter ) # type: ignore
283+ else :
284+ field_model_all = self ._field .related_model .filter (filter ) # type: ignore
276285 if perPage is not None and page is not None :
277286 field_model = field_model_all .limit (perPage ).offset ((page - 1 ) * perPage )
278287 count = await field_model_all .count ()
@@ -333,8 +342,14 @@ async def get_selects(
333342 pk : Optional [str ],
334343 perPage : Optional [int ],
335344 page : Optional [int ],
345+ filter : Any = None
336346 ):
337347 field_model_all = self ._field .related_model .all () # type: ignore
348+ if filter :
349+ if isinstance (filter , dict ):
350+ field_model_all = self ._field .related_model .filter (** filter ) # type: ignore
351+ else :
352+ field_model_all = self ._field .related_model .filter (filter ) # type: ignore
338353 if perPage is not None and page is not None :
339354 field_model = field_model_all .limit (perPage ).offset ((page - 1 ) * perPage )
340355 count = await field_model_all .count ()
@@ -409,8 +424,8 @@ def get_column(self, request: Request) -> Column:
409424 title = self .label ,
410425 body = CRUD (
411426 api = "get:"
412- + self ._field .model .__name__ # type: ignore
413- + f"/select/{ self .name } ?pk=$pk" ,
427+ + self ._field .model .__name__ # type: ignore
428+ + f"/select/{ self .name } ?pk=$pk" ,
414429 columns = [
415430 Column (label = "pk" , name = "pk" ),
416431 Column (label = "label" , name = "label" ),
@@ -428,12 +443,18 @@ async def get_selects(
428443 pk : Optional [str ],
429444 perPage : Optional [int ],
430445 page : Optional [int ],
446+ filter : Any = None
431447 ):
432448 related_model = self ._field .related_model # type: ignore
433449 if pk is not None :
434450 queryset = related_model .filter (** {self ._field .related_name : pk }) # type: ignore
435451 else :
436452 queryset = related_model .all ()
453+ if filter :
454+ if isinstance (filter , dict ):
455+ queryset = queryset .filter (** filter )
456+ else :
457+ queryset = queryset (filter )
437458 if pk is not None :
438459 count = await queryset .count ()
439460 data = await queryset
0 commit comments