2009-05-29 14 views
10

मेरे डीजेंगो एप्लिकेशन एप्लिकेशन में मेरे पास एक फॉर्मेट है जो एक साधारण (मॉडल नहीं) रूप से बनाया गया है, अतिरिक्त = 1 (जावास्क्रिप्ट को बाद में और रूपों को जोड़ने की अनुमति देने के लिए))।Django Formset.is_valid() अतिरिक्त रूपों के लिए असफल

class SomeForm(forms.Form): 
    #some fields with required=False 
    length = forms.IntegerField(required=False) 

    # An example of one of the fields with choices i have 
    A = 0 
    B = 1 
    C = 2 
    D = 3 

    choices = ((A, 'Aah'), (B, 'Baa'), (C, 'Caa'), (D, 'Daa')) 

    # This is a required choice field 
    pickme = forms.ChoiceField(choices=choices) 


SomeFormset = formset_factory(SomeForm, can_delete=True, extra=1) 
अब

, जब मैं बना सकते हैं और पोस्ट अनुरोध पर मेरे विचार में यह मान्य करने के लिए प्रयास करें:

my_formset = SomeFormset(request.POST, request.FILES) 

if(my_formset.is_valid()): 
    # FAIL 

यह हमेशा ऊपर जाँच विफल रहता है, यदि अतिरिक्त प्रदान की गई प्रपत्र खाली प्रस्तुत की है।

यदि मैं पिछले खाली अतिरिक्त फॉर्म पर form.changed_data की जांच करता हूं, तो मुझे उन फ़ील्ड मिलते हैं जिन पर उनके पास विकल्प हैं (जैसे पिकमे ऊपर)। दूसरे शब्दों में, फ़ॉर्मेट यह समझने के लिए पर्याप्त स्मार्ट नहीं है कि खाली सबमिट किए गए फॉर्म को अनदेखा किया जाना चाहिए, जब कुछ विकल्प फ़ील्ड की आवश्यकता होती है।

उत्तर

18

धन्यवाद कार्ल, आपने मुझे मेरी समस्या की जड़ खोजने के लिए प्रेरित किया।

जब एक विकल्प क्षेत्र है, जो आवश्यक है, हम एक प्रारंभिक मूल्य सेट करना होगा साथ एक फार्म बनाने, अन्यथा रूप है कि क्षेत्र विचार करेंगे बदल दिया है।

इस तरह एक फार्म के लिए

तो:

class SomeForm(forms.Form): 

    A = 0 
    B = 1 
    C = 2 
    D = 3 

    choices = ((A, 'Aah'), (B, 'Baa'), (C, 'Caa'), (D, 'Daa')) 

    # This is a required choice field 
    pickme = forms.ChoiceField(choices=choices) 

हम करते हैं इस:

pickme = forms.ChoiceField(choices=choices, initial=A) 

फिर जब एक formset अतिरिक्त रूप यह है कि pickme एक की एक प्रारंभिक मूल्य था देखेंगे की जाँच करता है, और यह अब भी है, और इसे अपरिवर्तित माना जाएगा।

+0

मुझे लगता है कि एक ही बग प्रतीत होता है, लेकिन प्रारंभिक प्रदान करने से समस्या वास्तव में हल नहीं होती है। क्या आप वाकई अपनी समस्या को ठीक कर चुके हैं? – ricree

+0

नहीं, लेकिन यह वही तय है। – drozzy

+0

इस उत्तर में एक समस्या हल हो गई थी जो मैं कर रहा था। धन्यवाद! – fholo

9

यह फ़ॉर्मेट्स का सामान्य व्यवहार नहीं है। Formsets pass empty_permitted=True to all "extra" forms, और a form with empty_permitted that hasn't been modified should always pass validation। ध्यान दें कि यह Django व्यवस्थापक में ठीक काम करता है (यदि आप इनलाइन का उपयोग करते हैं)।

आपको अपने कोड में कुछ और करना होगा जो इस व्यवहार को कहीं तोड़ रहा है। प्रासंगिक फॉर्म का पूरा कोड पोस्ट करें?

+0

धन्यवाद मैं इसे देखूंगा और आपको वापस ले जाऊंगा – drozzy

+0

आईटी यह पता लगाता है कि यह विकल्प फ़ील्ड के कारण है क्योंकि form.changed_data में मेरे सभी विकल्प फ़ील्ड हैं जिनमें "खाली" प्रविष्टि नहीं है। मैं इसे प्रतिबिंबित करने के लिए प्रश्न अद्यतन करता हूं। हालांकि मेरे पास अभी भी कोई अच्छा समाधान नहीं है। – drozzy

+0

मैंने इसे समझ लिया! धन्यवाद! – drozzy

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