dzida
dzida

Reputation: 8981

How to change ManyToManyField widget to CheckboxSelectMultiple without overriding field definition in a ModelForm

I have django ModelForm for model with ManyToManyField. I want to change widget for this field toCheckboxSelectMultiple. Can I do this without overriding a field in a form definition?

I constantly use code similar to this:

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

Is there other way to do this?

EDIT: I need this for Django 1.1.1 project

Upvotes: 7

Views: 6709

Answers (2)

Daniel Roseman
Daniel Roseman

Reputation: 599600

If you're using Django 1.2+, you can use the widgets tuple in the inner Meta class.

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

See the documentation.

Upvotes: 26

patrick
patrick

Reputation: 6840

Another way to do this is doing it in the init of the ModelForm:

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

    [...]

Upvotes: 7

Related Questions