2010-07-02 46 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

相關問題