Когда какой-либо параметр выбран из какого-либо одного раскрывающегося списка, я хочу, чтобы тот же параметр был удален из всех остальных раскрывающихся списков.
Чтобы помочь визуализировать это, я пытаюсь построить преобразователь столбцов. Для каждого имени столбца слева есть выпадающий список справа, где пользователь выберет имя столбца из загруженного файла, которое соответствует имени слева. Поскольку исходный и целевой столбцы имеют отношение один к одному, когда имя столбца выбирается из одного из раскрывающихся списков, его можно удалить из всех остальных.
В качестве подтверждения концепции я попробовал это только на одном из выпадающих списков, используя приведенный ниже код. Когда я выбираю опцию из любого другого выпадающего меню, я ожидаю, что опцию удаляют из этого конкретного. Я не получаю никаких ошибок, и обратный вызов появляется в графе обратного вызова, но он ничего не делает. Операторы печати в обратном вызове даже не выполняются, что означает, что обратный вызов на самом деле не выполняется вообще.
def generate_output_callback(input_id):
def dd_callback(input_values, state):
if not input_values:
print('Preventing update.'.upper())
raise PreventUpdate
else:
print(f'callback ran for dropdown {input_id}')
for val in input_values:
if val:
try:
i = state.index({'label': val, 'value': val})
del state[i]
except ValueError:
pass
return state
return dd_callback
all_cols = ['ACCTNUMBER', 'col2', 'col3']
inputs = {}
for col in all_cols:
inputs[col] = Input(col, 'value')
all_other_inputs_dict = {k:v for (k,v) in inputs.items() if k != 'ACCTNUMBER'}
all_other_inputs = list(all_other_inputs_dict.values())
cb = generate_output_callback('ACCTNUMBER')
app.callback(
Output('ACCTNUMBER', 'options'),
all_other_inputs,
[State('ACCTNUMBER', 'options')])(cb)