2011-11-06 11 views
6
from django import forms 

class SignUpForm(forms.Form): 
    birth_day = forms.ChoiceField(choices=range(1,32)) 

मुझे "रेंडरिंग के दौरान टाइप एरर पकड़ा जा रहा है: 'int' ऑब्जेक्ट इज़ेबल नहीं है"। https://docs.djangoproject.com/en/dev/ref/models/fields/#field-choices कहता है कि विकल्प तर्क एक सूची या टुपल जैसे पुनरावृत्तियों को लेता है।डीजेगो फॉर्म चॉइसफ़िल्ल्ड रेंज(): 'int' ऑब्जेक्ट इट्रेबल

http://docs.python.org/library/functions.html#range कहता है कि श्रेणी() एक सूची बनाता है।

मुझे कोई त्रुटि क्यों मिल रही है?

मैंने मानचित्र() का उपयोग करके सूची को स्ट्र में बदलने की कोशिश की लेकिन मुझे विभिन्न त्रुटियां मिलीं।

उत्तर

15

... कहता है कि तर्क तर्क सूची या टुपल जैसे पुनरावृत्तियों को लेता है।

नहीं, यह यह 2-tuples का एक iterable लेता है कहते हैं।

इस क्षेत्र के विकल्पों के रूप में उपयोग करने के लिए 2-टुपल्स का एक पुनरावृत्त (उदा।, सूची या टुपल)।

birth_day = forms.ChoiceField(choices=((str(x), x) for x in range(1,32))) 
+1

काम करता है, ऐसा लगता है कि पढ़ने के दौरान मुझे सावधान रहना होगा। समाधान में एक अतिरिक्त बाएं कोष्ठक हैं जिन्हें हटाया जाना आवश्यक है। – deadghost

+0

तो यह करता है। –

+0

@ IgnacioVazquez-Abrams: क्या कोई कारण है कि आप जेनरेटर की बजाय सूची या टुपल का उपयोग क्यों करते हैं? http://stackoverflow.com/questions/16940293/why-is-there-no-tuple-comprehension-in-python – noisy

0

आप 2 tuples की जरूरत है। एक ही 2 tuples

from django import forms 


class SignUpForm(forms.Form): 

    birth_day = models.IntegerField(choices=list(zip(range(1, 32), range(1, 32))), unique=True) 

याद रखें (1,32) 1 से 31 तक बनाएगा, ज़िप निर्मित अंतर्निहित फ़ंक्शन का उपयोग करें।

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