Skip to content

Commit d95cba1

Browse files
committed
增加filter字段
1 parent 2adbf1c commit d95cba1

File tree

2 files changed

+26
-5
lines changed

2 files changed

+26
-5
lines changed

fast_tmp/amis/formitem.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,7 @@ class FileItem(FormItem):
380380

381381
class ImageItem(FormItem):
382382
type = FormItemEnum.input_image
383-
383+
multiple: Optional[bool] # 多选
384384
receiver: str
385385

386386

@@ -441,4 +441,4 @@ class InputTable(FormItem):
441441
needConfirm: Optional[bool] # true 是否需要确认操作,,可用来控控制表格的操作交互
442442
canAccessSuperData: Optional[bool] # false 是否可以访问父级数据,也就是表单中的同级数据,通常需要跟 strictMode 搭配使用
443443
strictMode: Optional[bool] # true 为了性能,默认其他表单项项值变化不会让当前表格更新,有时候为了同步获取其他表单项字段,需要开启这个。
444-
columns: Optional[List[ColumnInline]] # 列信息
444+
columns: Optional[List[Column]] # 列信息

fast_tmp/site/field.py

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

260263
class 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

Comments
 (0)