2010-07-02 14 views
7

में फ़ील्ड परिभाषा को ओवरराइड किए बिना बहुभाषी के साथ मॉडल के लिए django ModelForm है। मैं इस क्षेत्र के लिए CheckboxSelectMultiple पर विजेट बदलना चाहता हूं। क्या मैं इसे एक फॉर्म परिभाषा में एक फ़ील्ड ओवरराइड किए बिना कर सकता हूं?ManyToManyField विजेट को कैसे बदलें MaxboxSelectMultiple को मॉडलफॉर्म

मैं लगातार कोड इस के समान का उपयोग करें:

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

वहाँ यह करने के लिए अन्य रास्ता नहीं है?

संपादित करें: मैं इस Django 1.1.1 परियोजना

उत्तर

7

के लिए एक और तरीका है यह करने की आवश्यकता init 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 उपयोग कर रहे हैं +, आप आंतरिक मेटा क्लास में widgets टुपल का उपयोग कर सकते हैं।

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

the documentation देखें।

+0

अच्छा! यह नहीं पता था :) – patrick

+0

ठंडा एक! धन्यवाद! दुर्भाग्यवश इस परियोजना में मैं Django 1.1.1 का उपयोग करता हूं, इसलिए यह मदद नहीं करेगा, वैसे भी संकेत के लिए धन्यवाद। – dzida

+0

इसे पर्याप्त रूप से ऊपर नहीं उठाया जा सकता है! – BastiBen

संबंधित मुद्दे