2010-07-02 38 views
7

对于具有ManyToManyField的模型,我有django ModelForm。我想将此字段的小部件更改为CheckboxSelectMultiple。我可以在不重写表单定义中的字段的情况下执行此操作吗?如何将ManyToManyField小部件更改为CheckboxSelectMultiple而不覆盖ModelForm中的字段定义

我经常使用的代码与此类似:

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

有没有其他办法可以做到这一点?

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

回答

7

另一种方式来做到这一点是做什么的初始化的的ModelForm的

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

    [...] 
25

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

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

请参阅the documentation

+0

不错!不知道这个:) – patrick 2010-07-02 21:22:13

+0

很酷!谢谢!在这个项目中不幸,我使用Django 1.1.1,所以它不会帮助,无论如何感谢提示。 – dzida 2010-07-02 22:00:42

+0

不能满足这个足够! – BastiBen 2013-01-04 11:49:05

相关问题