Как изменить виджет ManyToManyField на CheckboxSelectMultiple без переопределения определения поля в ModelForm - PullRequest
7 голосов
/ 02 июля 2010

У меня есть django ModelForm для модели с ManyToManyField.Я хочу изменить виджет для этого поля на CheckboxSelectMultiple.Могу ли я сделать это без переопределения поля в определении формы?

Я постоянно использую код, подобный следующему:

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

Есть ли другой способ сделать это?

РЕДАКТИРОВАТЬ: Мне нужно это для проекта Django 1.1.1

Ответы [ 2 ]

26 голосов
/ 03 июля 2010

Если вы используете Django 1.2+, вы можете использовать кортеж widgets во внутреннем Мета-классе.

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

См. документацию .

7 голосов
/ 03 июля 2010

Другой способ сделать это - сделать это в init ModelForm:

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

    [...]
...