2012-12-06 13 views
8

मैं वास्तव में django प्रारूपों को भ्रमित कर रहा हूं।django formets भ्रम (सत्यापन, आवश्यक, खाली_प्रर्मित)

मैं विशेष रूप से जो मैं वास्तव में समझ में नहीं आता निम्नलिखित अवधारणाओं के साथ समस्याओं कर रहा हूँ:

formset बहुत चालाक अतिरिक्त रूपों है कि बदले नहीं गए हैं अनदेखी करने के लिए है।

कोड के बारे में बात करना बहुत स्मार्ट होने की कोशिश कर रहा है। इसका मतलब क्या है? मुझे यह क्यों चाहिए?

फिर, पिछले अवधारणा को समझने की कोशिश कर रहा, मैं लोगों को

आवश्यक formsets में रूपों बनाने देखें।

यह एक और अवधारणा है जिसे मैं लटक नहीं सकता। एक फॉर्मेट में एक आवश्यक रूप क्या है और मुझे एक फॉर्म क्यों बनाना है? फिर कुछ दस्तावेज नहीं है।

फिर मेरी वास्तविक समस्या के लिए आ रहा है, जो अन्य लोगों के पास लगता है, लेकिन वे वास्तव में यह नहीं समझा सकते कि उन्होंने इसे ठीक करने के तरीके को क्यों तय किया है।

निम्नलिखित उदाहरण में, फ़ॉर्मेट मान्य है, जबकि एक ही इनपुट वाला एक व्यक्तिगत रूप अमान्य होगा?

import django 
class MyForm(django.forms.Form): 
    start = django.forms.DateField() 
    end = django.forms.DateField() 

data = { 
    'form-TOTAL_FORMS': '1', 
    'form-MAX_NUM_FORMS': '', 
    'form-INITIAL_FORMS': '0', 
    'form-0-start': '', 
    'form-0-end': '', 
} 

MyFormSet = formset_factory(MyForm) 
formset = MyFormSet(data) 
#fee_forms[0].empty_permitted = False 

print formset.is_valid() 
# --- returns True --- 
print formset.errors 

f = MyForm({'start': '', 'end': ''}) 
print f.is_valid() 
# --- returns False --- 
print f.errors 

गलत पर empty_permitted सेटिंग मेरे लिए अपेक्षित परिणाम देने के लिए (जो formset कारण 'शुरू' और 'अंत' याद आ रही करने के लिए अवैध होने के लिए) लगता है। यह एक और अनियंत्रित सुविधा है ...

क्या कोई समझाने के लिए कुछ समय बचाएगा?

आप

उत्तर

12

formset बहुत चालाक अतिरिक्त रूपों है कि परिवर्तित नहीं किया गया अनदेखी करने के लिए है धन्यवाद।

कोड के बारे में बात करना बहुत स्मार्ट होने की कोशिश कर रहा है। इसका मतलब क्या है? मुझे यह क्यों चाहिए?

इसका मतलब यह लगता है - के रूप में आप बाहर काम किया - True को empty_permitted सेट है कि "अतिरिक्त" (अपने उदाहरण में extra=N के साथ) formset द्वारा बनाई रूपों। यह देखने के लिए Have a glance at django/forms/formsets.py

formset[0].empty_permitted का अर्थ है कि यदि formset[0].has_changed() == False, कोई और प्रसंस्करण/सत्यापन नहीं किया जाता है। फिर, you can see this in action in forms/forms.py

इस, a blog post suggests जो सेट empty_permitted = Falsemodelformset_factory (या inlineformset_factory) में उपयोग करने के लिए एक कस्टम formset को परिभाषित करने को रोकने के लिए:

class MyModelFormSet(BaseModelFormSet): 
    def __init__(self, *args, **kwargs): 
     super(MyModelFormSet, self).__init__(*args, **kwargs) 
     for form in self.forms: 
      form.empty_permitted = False 

मैं इस परीक्षण नहीं किया है, लेकिन यह कानूनी लग रहा है।

क्यों किसी को भी इस चाहते हो सकता है के रूप में, यह django-dynamic-formset बहुत सरल का उपयोग कर बनाता है -, आप form-0 और form-2 और के लिए डेटा भेज सकते हैं form-1 एक अतिरिक्त फार्म (यानी नहीं डेटा मॉडल से जुड़ा हुआ) मानते हुए किया गया था, Django जीता ' शिकायत नहीं करते। यदि empty_permitted डिफ़ॉल्ट रूप से False थे, तो आपको अपने कोड में रिक्त फॉर्म को छोड़ने या जावास्क्रिप्ट में चीजों को पुन: प्रस्तुत करने के बारे में चिंता करने की आवश्यकता होगी।

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