2012-03-02 17 views
5

मेरे पास एक ऐसा फॉर्म है जो is_valid() परीक्षण में विफल रहता है। मैंने एक समान रूप बनाया जो परीक्षण डेटा को उसी डेटा इनपुट से पास करता है। निश्चित नहीं है कि कोई क्यों गुजरता है और कोई असफल हो जाता है।अमान्य Django फॉर्म

यहाँ प्रकार हैं:

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

class ActivitySaveForm(forms.Form): 
    name = forms.CharField(
     label=u'Activity Name', 
     widget=forms.TextInput(attrs={'size': 64}) 
    ) 
    url = forms.URLField(
     label=u'URL', 
     widget=forms.TextInput(attrs={'size': 64}) 
    ) 
    desc = forms.CharField(
     label=u'Describe it', 
       widget=forms.TextInput(attrs={'size': 250}) 
    ) 
    created = forms.DateField(
     label=u'Date Entered',initial=datetime.date.today, 
    ) 
    priority = forms.CharField(
     label=u'priority: 1-5', 
      widget=forms.TextInput(attrs={'size': 1}) 
    ) 
    difficulty = forms.CharField(
     label=u'How hard is it? 1-5', 
      widget=forms.TextInput(attrs={'size': 1}) 
    ) 
    done = forms.TypedChoiceField(choices=choices, widget=forms.RadioSelect, coerce=int 
    ) 
    tags = forms.CharField(
     label=u'Tags',required=False, 
      widget=forms.TextInput(attrs={'size': 64}) 
    ) 
#def __init__(self, *args, **kwargs): 
    #super(CircuitForm, self).__init__(*args, **kwargs) 

    #for key in self.fields: 
     #self.fields[key].required = False 


class AcTest(forms.Form): 
    name = forms.CharField(
     label=u'Activity Name', 
     widget=forms.TextInput(attrs={'size': 64}) 
    ) 
    url = forms.URLField(
     label=u'URL', 
     widget=forms.TextInput(attrs={'size': 64}) 
    ) 
    desc = forms.CharField(
     label=u'Describe it', 
       widget=forms.TextInput(attrs={'size': 250}) 
    ) 
    created = forms.DateField(
     label=u'Date Entered',initial=datetime.date.today, 
    ) 
    priority = forms.CharField(
     label=u'priority: 1-5', 
      widget=forms.TextInput(attrs={'size': 1}) 
    ) 
    difficulty = forms.CharField(
     label=u'How hard is it? 1-5', 
      widget=forms.TextInput(attrs={'size': 1}) 
    ) 
    done = forms.TypedChoiceField(choices=choices, widget=forms.RadioSelect, coerce=int 
    ) 
    tags = forms.CharField(
     label=u'Tags',required=False, 
      widget=forms.TextInput(attrs={'size': 64}) 
    ) 

यहाँ परीक्षण और दोनों के लिए परिणाम है।

>>> data = {'name':'test', 
...   'url': 'www.test.com', 
...   'desc':'test desc', 
...   'created': '01/01/1900', 
...   'priority':1, 
...   'difficulty':1, 
...   'desc':'test desc', 
...   'tags':'test desc'} 
>>> f=ActivitySaveForm(data) 
>>> f.is_valid() 
False 
>>> f=AcTest(data) 
>>> f.is_valid() 
True 

यह सुनिश्चित नहीं है कि इस त्रुटि का निदान कैसे करें और इसे काम करने का कोई तरीका नहीं मिला है। इसमें आपकी मदद के लिए धन्यवाद।

उत्तर

8

मैं पर और मेरे लिए अपने कोड भाग गया, दोनों रूपों को मान्य करने के लिए असफल। आप बस यह कर सकते हैं: print f.errors और आपको सत्यापन के दौरान बनाए गए त्रुटि संदेशों के लिए HTML मिलेगा।

इसके लिए मैं:

<ul class="errorlist"><li>done<ul class="errorlist"><li>This field is required.</li></ul></li></ul>

तो दूसरे शब्दों में, आप एक मूल्य के 'पूर्ण' क्षेत्र के लिए निर्दिष्ट नहीं किया है, भले ही यह आवश्यक था। एक बार जब आप 'done':1data शब्दकोश में जोड़ते हैं, तो फॉर्म मान्य होता है।

क्यों एक फॉर्म मान्य है और दूसरा नहीं ... मैं इसे सब एक एकल, छोटे कार्यक्रम में पेस्ट करता हूं, आप शायद पाएंगे कि वे दोनों एक ही तरीके से व्यवहार करते हैं। मैं केवल अनुमान लगा सकता हूं कि किसी कारण से आप वास्तव में दोनों मामलों में एक ही डेटा पास नहीं करते थे। या जब आप परीक्षण चलाते थे तो फॉर्म में सूक्ष्म अंतर था। लेकिन मैं निश्चित नहीं हो सकता।

किसी भी दर पर, त्रुटियों को प्रिंट करने का प्रयास करें और आपको अंतर्दृष्टि प्राप्त करनी चाहिए।

+0

धन्यवाद jbrendel। शर्मिंदा। यही मुद्दा था। – jabs

2

आपको फॉर्म त्रुटियों की जांच करने में सक्षम होना चाहिए। ऐसा कुछ भी आपको त्रुटियों को देखने की अनुमति देने के लिए काम कर सकता है। (क्षमा करें यह untested है)

https://docs.djangoproject.com/en/dev/topics/forms/#customizing-the-form-template

>>> f = ActivitySaveForm(data) 
>>> f.non_field_errors() 
>>> field_errors = [ (field.label, field.errors) for field in f] 
संबंधित मुद्दे