如何根据另一个字段过滤 ModelMultipleChoiceField?

问题描述 投票:0回答:1

根据下面的表格,我想知道是否有办法(或插件)使用字段tipo_indicador来过滤indicadores字段:

tipo_indicador = forms.ModelChoiceField(
    queryset=TipoIndicador.objects.all(),
    label=u'Tipo de indicador',
    required=False,
)

indicadores = forms.ModelMultipleChoiceField(
    label= _(u'Indicadores'),
    required=False,
    queryset=Indicador.objects.all(),
    widget=admin_widgets.FilteredSelectMultiple(verbose_name=_(u'indicadores'), is_stacked=False)
)
django django-models django-forms django-templates django-views
1个回答
0
投票

可以使用Django的表单和视图根据tipo_indicador字段过滤indicadores字段。

enter code here class MyForm(forms.Form):
tipo_indicador = forms.ModelChoiceField(
    queryset=TipoIndicador.objects.all(),
    label=u'Tipo de indicador',
    required=False,
)

indicadores = forms.ModelMultipleChoiceField(
    label= _(u'Indicadores'),
    required=False,
    queryset=Indicador.objects.none(),  # Empty at first
    widget=admin_widgets.FilteredSelectMultiple(verbose_name=_(u'indicadores'), is_stacked=False)
)

def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    if self.data.get('tipo_indicador'):
        self.fields['indicadores'].queryset = Indicador.objects.filter(tipo_indicador=self.data.get('tipo_indicador'))

当表单初始化时,它会检查 tipo_indicador 是否有值。如果是,它会根据 tipo_indicador 值过滤指标查询集。

这仅在提交表单后才有效。如果您想在不刷新页面的情况下过滤选项,则需要使用 JavaScript 或 Django 插件,例如 django-select2。

© www.soinside.com 2019 - 2024. All rights reserved.