You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JustPy Python中获取Ag-Grid筛选值返回None的问题求助

问题:JustPy中Ag-Grid无法获取筛选值(getFilterModel返回None)

使用JustPy编写获取Ag-Grid筛选值的功能,点击"Get applied filter"按钮后,控制台输出filterValues为None,无法正常获取筛选模型。原代码如下:

import justpy as jp

grid_options = """
{
    rowSelection: 'multiple',
    defaultColDef: {
        filter: true,
        sortable: true,
        resizable: true,
        cellStyle: {textAlign: 'center'},
        headerClass: 'font-bold'
    }, 
      columnDefs: [
      {headerName: "Make", field: "make"},
      {headerName: "Model", field: "model"},
      {headerName: "Price", field: "price"}
    ],
      rowData: [
      {make: "Toyota", model: "Celica", price: 35000},
      {make: "Ford", model: "Mondeo", price: 32000},
      {make: "Porsche", model: "Boxter", price: 72000}
    ]
}
"""

def row_selected(self, msg):
    wp = msg.page
    if msg.selected:
        wp.selected_rows[msg.rowIndex] = msg.data
    else:
        wp.selected_rows.pop(msg.rowIndex)
    s = f'Selected rows {sorted(list(wp.selected_rows.keys()))}'
    for i in sorted(wp.selected_rows):
        s = f'{s}\n Row {i}  Data: {wp.selected_rows[i]}'
    if wp.selected_rows:
        wp.rows_div.text = s
    else:
        wp.rows_div.text = 'No row selected'

async def get_all_filter(self, msg):
    filterValues = await self.grid.run_api('getFilterModel()', msg.page)
    print(filterValues)
    msg.page.filterValues = filterValues

async def select_all_rows(self, msg):
    await self.grid.run_api('selectAll()', msg.page)

async def deselect_rows(self, msg):
    await self.grid.run_api('deselectAll()', msg.page)

def grid_test():
    wp = jp.WebPage()
    wp.selected_rows = {}  # Dictionary holding selected rows
    wp.filterValues = {} # Dictionary holding grid filter values
    grid = jp.AgGrid(a=wp, options=grid_options, style='height: 200px; width: 300px; margin: 0.25em')
    grid.options.columnDefs[0].checkboxSelection = True
    grid.on('rowSelected', row_selected)
    wp.rows_div = jp.Pre(text='Data will go here when you select rows', classes='border text-lg', a=wp)
    btn_deselect = jp.Button(text='Deselect rows', classes=jp.Styles.button_simple+' m-2', a=wp, click=deselect_rows)
    btn_deselect.grid = grid
    btn_select_all = jp.Button(text='Select all rows', classes=jp.Styles.button_simple+' m-2', a=wp, click=select_all_rows)
    btn_select_all.grid = grid
    btn_get_filter = jp.Button(text='Get applied filter', classes=jp.Styles.button_simple+' m-2', a=wp, click=get_all_filter)
    btn_get_filter.grid = grid
    return wp

jp.justpy(grid_test)
问题原因与解决方法

核心问题

调用run_api时存在两个错误:

  1. 传递了带括号的API调用字符串'getFilterModel()',JustPy要求传递**方法名(不带括号)**即可
  2. 额外传递了msg.page参数,run_api方法内部会自动处理页面上下文,无需手动传入

修正后的关键代码

修改get_all_filter函数,同时同步修正select_all_rows和deselect_rows函数的调用方式:

async def get_all_filter(self, msg):
    filterValues = await self.grid.run_api('getFilterModel')
    print(filterValues)
    msg.page.filterValues = filterValues

async def select_all_rows(self, msg):
    await self.grid.run_api('selectAll')

async def deselect_rows(self, msg):
    await self.grid.run_api('deselectAll')

说明

  • JustPy的run_api方法会自动将传入的方法名转化为前端Ag-Grid的API调用,无需手动添加括号
  • 去掉多余的msg.page参数后,方法能正确获取并返回筛选模型数据,此时在控制台就能看到当前的筛选值,同时msg.page.filterValues也会被正确赋值

内容的提问来源于stack exchange,提问作者Kanda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 06:06:07