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

Dash回调根据Material下拉选择动态更新Batch下拉选项问题求解

问题根因
  • 物料下拉框material_dd组件未设置初始可选值,对应的回调仅监听搜索值变化,用户未主动搜索时无法正常选中物料值,导致后续Batch联动回调触发时material_dd始终为None
  • Batch联动回调中筛选批次使用了全量数据集df,但全局批次列表是从过滤后的溶出数据集df_dis中提取的,且全量df的Material字段未做缺失值填充,匹配时容易出现不命中的情况
  • basis_dd的回调存在参数笔误,输入为basis_dd的搜索值,函数参数却命名为batch_dd,返回格式也不符合Dropdown要求的{'label':'xxx','value':'xxx'}结构,会导致该下拉框异常
修复方案
  1. 给material_dd组件添加初始可选值,删除多余的仅监听搜索值的物料选项回调
  2. 修正Batch联动回调的筛选数据源为df_dis,和全局批次列表的数据源保持一致
  3. 修正basis_dd的回调逻辑,适配Dropdown的返回格式要求
修正后的核心代码

组件部分修改

# 物料下拉框新增初始options配置
html.Div([
    html.Div(children='''Material: '''),
    dcc.Dropdown(
            id='material_dd',
            multi=False,
            clearable=True,
            disabled=False,
            options=[{'label': i, 'value': i} for i in material] # 新增本行
        ),
    ],style = {'width': '15%','display': 'inline-block'}
),

回调部分修改

# 删除原有的material_dd options回调,直接用组件初始配置即可
@app.callback(
    Output('batch_dd','options'),
    Input('material_dd','value') # 无需自定义搜索逻辑可删除batch_dd的search_value输入
)
def batch_options(material_dd):
    if material_dd is None:
        return [{'label': i, 'value': i} for i in batch]
    else:
        # 筛选数据源改为df_dis,和全局批次的数据源保持一致
        batch_df = df_dis[df_dis['Material']==material_dd]
        return [{'label':i,'value':i} for i in batch_df['Batch'].fillna('None').unique()]

# 修正basis_dd回调逻辑示例(按需调整)
@app.callback(
    Output('basis_dd','options'),
    Input('batch_dd','value')
)
def get_basis(batch_dd):
    if not batch_dd:
        return [{'label': i, 'value': i} for i in basis]
    batch_df = df_dis[df_dis['Batch']==batch_dd]
    return [{'label':i,'value':i} for i in batch_df['Basis'].fillna('None').unique()]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:24:00