2009-06-23 10 views
11

यह मैं कैसे के बारे में, के रूप में एक बूलियन मॉडल क्षेत्र प्रदर्शित करने के लिए चला गया है के रूप में रेडियो बटन हाँ और नहीं।डिफ़ॉल्ट चेकबॉक्स रेडियो बटन के बजाय के रूप में एक Django रूप में एक बूलियन मॉडल क्षेत्र प्रदर्शित करें

choices = ((1,'Yes'), 
      (0,'No'), 
     ) 

class EmailEditForm(forms.ModelForm): 

    #Display radio buttons instead of checkboxes 
    to_send_form = forms.ChoiceField(choices=choices,widget=forms.RadioSelect) 

    class Meta: 
    model = EmailParticipant 
    fields = ('to_send_email','to_send_form') 

    def clean(self): 
    """ 
    A workaround as the cleaned_data seems to contain u'1' and u'0'. There may be a better way. 
    """ 

    self.cleaned_data['to_send_form'] = int(self.cleaned_data['to_send_form']) 
    return self.cleaned_data 

जैसा कि आप उपरोक्त कोड में देख सकते हैं, मुझे एक साफ विधि की आवश्यकता है जो इनपुट स्ट्रिंग को एक पूर्णांक में परिवर्तित कर दे, जो अनावश्यक हो सकती है।

क्या ऐसा करने के लिए एक बेहतर और/या djangoic तरीका है। यदि हां, तो कैसे?

और नहीं, BooleanField का उपयोग करके बहुत अधिक समस्याएं पैदा होती हैं। इसका उपयोग करना मेरे लिए स्पष्ट प्रतीत होता था; लेकिन यह नहीं है। ऐसा क्यों है।

उत्तर

15

TypedChoiceField का उपयोग करें।

class EmailEditForm(forms.ModelForm): 
    to_send_form = forms.TypedChoiceField(
         choices=choices, widget=forms.RadioSelect, coerce=int 
        ) 
+0

ध्यान दें कि विकल्प जोड़े का एक क्रम है (http://docs.djangoproject.com/en/dev/ref/forms/fields/#django.forms.ChoiceField देखें)। बिल्कुल यकीन नहीं है कि जोड़ों में क्या है, वैसे। – dfrankow

+1

मैंने widgets.py में देखा, विकल्प फ़ॉर्म के tuples की एक सूची है (choice_value, choice_label)। – dfrankow

6
field = BooleanField(widget=RadioSelect(choices=YES_OR_NO), required=False) 


YES_OR_NO = (
    (True, 'Yes'), 
    (False, 'No') 
) 
+2

मुझे लगता है कि डैनियल का समाधान बेहतर है .... मुझे नहीं लगता कि यह सबमिट किए गए मूल्य को एक बूल पर वापस लाएगा। – mpen

+0

यह उत्तर यह नहीं बताता है कि इसे मॉडल में या रूप में रखा जाना चाहिए या नहीं। मैं django रूपों के लिए कुछ नया हूँ और मैं देखना चाहता हूं कि यह काम करेगा या नहीं और यह कहां काम करेगा? –

+0

@StevenRogers यह एक फॉर्म फ़ील्ड मॉडल फ़ील्ड नहीं है; इसलिए यह एक क्षेत्र को एक django रूप के भीतर दर्शाता है, जहां कई फ़ील्ड एक ही रूप लिखते हैं। दूसरी ओर मॉडल फ़ील्ड डेटाबेस तालिका के कॉलम का प्रतिनिधित्व करते हैं। – jhrr

0

आप ints इस के बजाय बूलियन्स से निपटने के लिए चाहते हैं जिस तरह से यह करने के लिए है।

forms.TypedChoiceField(
    choices=((True, 'Yes'), (False, 'No')), 
    widget=forms.RadioSelect, 
    coerce=lambda x: x == 'True' 
) 
संबंधित मुद्दे

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