简体   繁体   中英

Django - replace form widget for fields in list

I'm trying to change the widget to fields in a form which have a string in the name, I'm trying to do something like the following:

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)

Not sure if it's possible or not. At the moment it doesn't error, but doesn't change the widget either.

Thanks, Isaac

You should do it in the __init__ constructor:

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)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM