From b4ac434b62e88b3a4903f4340d7cc67c2adc8614 Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Mon, 22 Jun 2026 14:10:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=86=E7=A6=BBsearch=5Ffields(=E6=90=9C?= =?UTF-8?q?=E7=B4=A2=E8=A1=A8=E5=8D=95=E5=AD=97=E6=AE=B5=E5=AE=9A=E4=B9=89?= =?UTF-8?q?)=E5=92=8Cdata=5Ffilter(=E9=80=BB=E8=BE=91=E8=A1=A8=E8=BE=BE?= =?UTF-8?q?=E5=BC=8F)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xls2ddl/tmpls.py | 28 ++++++++++++---------------- xls2ddl/xls2crud.py | 6 +++--- 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/xls2ddl/tmpls.py b/xls2ddl/tmpls.py index b4dfabd..04c190b 100644 --- a/xls2ddl/tmpls.py +++ b/xls2ddl/tmpls.py @@ -73,8 +73,8 @@ data_browser_tmpl = """ {% if content_view %} "content_view":{{json.dumps(content_view, indent=4, ensure_ascii=False)}}, {% endif %} -{% if data_filter %} - "data_filter":{{json.dumps(data_filter, indent=4, ensure_ascii=False)}}, +{% if search_fields %} + "search_fields":{{json.dumps(search_fields, indent=4, ensure_ascii=False)}}, "search_form":{ "css":"card", "padding":"8px", @@ -159,28 +159,24 @@ sql = '''{{sql}}''' {% if not relation %} filterjson = params_kw.get('data_filter') if filterjson and isinstance(filterjson, str): -\ttry: -\t\tfilterjson = json.loads(filterjson) -\texcept (json.JSONDecodeError, TypeError): -\t\tfilterjson = None -# data_filter可能是CRUD字段定义({"fields":[...]}),不是过滤条件,忽略 -if filterjson and isinstance(filterjson, dict) and 'fields' in filterjson: - filterjson = None + try: + filterjson = json.loads(filterjson) + except (json.JSONDecodeError, TypeError): + filterjson = None fields_str=r'''{{json.dumps(fields, indent=4, ensure_ascii=False)}}''' ori_fields = json.loads(fields_str) if not filterjson: fields = [ f['name'] for f in ori_fields ] filterjson = default_filterjson(fields, ns) -{% if data_filter and data_filter.fields %} -# 应用 data_filter 中显式声明的 op(如 LIKE) -__df_fields = {{json.dumps(data_filter.fields, ensure_ascii=False)}} -__df_ops = {f['field']: f.get('op') for f in __df_fields if f.get('op')} -if filterjson and __df_ops: +{% if search_fields %} +# 应用 search_fields 中显式声明的 op(如 LIKE) +__sf_ops = {f['field']: f.get('op') for f in {{json.dumps(search_fields, ensure_ascii=False)}} if f.get('op')} +if filterjson and __sf_ops: if not isinstance(filterjson, dict) or 'AND' not in filterjson: filterjson = {'AND': [filterjson] if filterjson else []} for fj in filterjson['AND']: - if fj.get('field') in __df_ops: - fj['op'] = __df_ops[fj['field']] + if fj.get('field') in __sf_ops: + fj['op'] = __sf_ops[fj['field']] if fj['op'] == 'LIKE': var = fj.get('var') if var and var in ns and ns[var]: diff --git a/xls2ddl/xls2crud.py b/xls2ddl/xls2crud.py index e350554..71684d4 100644 --- a/xls2ddl/xls2crud.py +++ b/xls2ddl/xls2crud.py @@ -257,9 +257,9 @@ def filter_backslash(s): def build_filter_field_list(desc) -> list: """Build enriched filter field list for InlineForm search form. - When a data_filter field has uitype='code', auto-populate + When a search_fields field has uitype='code', auto-populate valueField/textField/params/dataurl from the model's codes definition.""" - if not desc.data_filter or not desc.data_filter.get('fields'): + if not desc.search_fields: return [] codes_map = {} if desc.codes: @@ -269,7 +269,7 @@ def build_filter_field_list(desc) -> list: codes_map[cfield] = c modulename = getattr(desc, 'modulename', '') result = [] - for f in desc.data_filter.fields: + for f in desc.search_fields: field_name = f.field if isinstance(f, dict) else getattr(f, 'field', '') field_title = f.title if isinstance(f, dict) else getattr(f, 'title', '') field_uitype = f.uitype if isinstance(f, dict) else getattr(f, 'uitype', 'str')