Django - 替换列表中字段的表单小部件

Django - replace form widget for fields in list

我正在尝试将小部件更改为名称中包含字符串的表单中的字段,我正在尝试执行如下操作:

class CI_tableForm(ModelForm):
        class Meta:
            model = CI_table
            fields = report_query_values
            for field in report_query_values:
                if "_id" in field:
                    field = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple)

不确定是否可行。 目前它没有错误,但也没有更改小部件。

谢谢, 艾萨克

您应该在 __init__ 构造函数中执行此操作:

class CI_tableForm(ModelForm):

    class Meta:
        model = CI_table
        fields = report_query_values

    def __init__(self, *args, **kwargs):
        super(CI_tableForm, self).__init__(*args, **kwargs)
        for field in report_query_values:
            if "_id" in field:
                choices = self.fields[field].widget.choices
                self.fields[field].widget = forms.CheckboxSelectMultiple(
                                                             choices=choices)