2010-07-02 23 views
7

J'ai django ModelForm pour le modèle avec ManyToManyField. Je veux changer le widget pour ce champ à CheckboxSelectMultiple. Puis-je le faire sans remplacer un champ dans une définition de formulaire?Comment changer le widget ManyToManyField en CheckboxSelectMultiple sans redéfinir la définition du champ dans un ModelForm

J'utilise constamment un code similaire à ceci:

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

Y at-il autre façon de le faire?

EDIT: Je en ai besoin pour Django 1.1.1 projet

Répondre

7

Une autre façon de le faire est de le faire dans la initialisation du ModelForm:

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

    [...] 
25

Si vous utilisez Django 1.2 +, vous pouvez utiliser le tuple widgets dans la classe Meta interne.

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

Voir the documentation.

+0

bien! Je ne le savais pas :) – patrick

+0

cool one! Merci! malheureusement dans ce projet j'utilise Django 1.1.1 donc ça ne va pas aider, de toute façon merci pour l'indice. – dzida

+0

Ne peut pas assez mettre cela en valeur! – BastiBen