如何在不重写ModelForm中的字段定义的情况下将ManyToManyField小部件更改为CheckboxSelectMultiple

时间:2010-07-02 17:20:00

标签: django django-forms many-to-many django-widget

对于带有ManyToManyField的模型,我有django ModelForm。我想将此字段的窗口小部件更改为CheckboxSelectMultiple。我是否可以在不覆盖表单定义中的字段的情况下执行此操作?

我经常使用类似的代码:

class MyModel(ModelForm):
    m2m_field = forms.ModelMultipleChoiceField(queryset = SomeModel.objects.all(),
                                               widget = forms.CheckboxSelectMultiple())

还有其他办法吗?

编辑:我需要这个用于Django 1.1.1项目

2 个答案:

答案 0 :(得分:26)

如果您使用的是Django 1.2+,则可以在内部Meta类中使用widgets元组。

class MyModelForm(forms.ModelForm):
    class Meta:
        widgets = {'m2m_field': forms.CheckboxSelectMultiple}

请参阅the documentation

答案 1 :(得分:7)

另一种方法是在ModelForm的 init 中执行此操作:

class MyModel(ModelForm):
    def __init__(self, *args, **kwargs):
        super(MyModel, self).__init__(*args, **kwargs)
        self.fields['m2m_field'].widget = forms.CheckboxSelectMultiple()

    [...]