2012-10-27 16 views
16

के साथ क्रिस्पी फॉर्म का उपयोग करें मैं crispy form में चला रहा हूं, और ऐसा लगता है कि मैं वही करता हूं जो बूटस्ट्रैप लेआउट के साथ फ़ॉर्म प्रस्तुत करता है।मॉडलफॉर्म

अब, forms.Form का उपयोग करने के बारे में उदाहरण बात करें। यह ठीक है, मैं इस तरह कोड लिखकर मेरा निर्माण कर सकता हूं:

class TemplateCreateForm(forms.Form): 
    title = forms.CharField(label=(u'Task name')) 
    description = forms.CharField(label=(u'Task description')) 
    url_start = forms.CharField(label=(u'Start page url')) 
    url_end = forms.CharField(label=(u'Final page url')) 

    def __init__(self, *args, **kwargs): 
     self.helper = FormHelper() 
     self.helper.form_method = 'post' 
     self.helper.add_input(Submit('submit', 'Submit')) 
     super(TemplateCreateForm, self).__init__(*args, **kwargs) 

लेकिन, अद्यतन कैसे करें? क्योंकि अगर मैं ध्यान में रखते हुए इस डाल:

form = TemplateCreateForm(request.POST or None, instance=template) 

यह क्योंकि उदाहरण केवल ModelForm के लिए काम नहीं करता है।

अब, मैं ModelForm साथ model.Form स्थानापन्न और ModelForm के लिए खस्ता फार्म का उपयोग कर सकते हैं? मैंने यह

class TemplateCreateForm(ModelForm): 
    title = forms.CharField(label=(u'Task name')) 
    description = forms.CharField(label=(u'Task description')) 
    url_start = forms.CharField(label=(u'Start page url')) 
    url_end = forms.CharField(label=(u'Final page url')) 

    def __init__(self, *args, **kwargs): 
     self.helper = FormHelper() 
     self.helper.form_method = 'post' 
     self.helper.add_input(Submit('submit', 'Submit')) 
     super(TemplateCreateForm, self).__init__(*args, **kwargs) 

    class Meta: 
     model = Template 
     exclude = ('user') 

यहां मैंने मेटा क्लास जोड़ा। अब: यह काम करता है, लेकिन क्या इसका उपयोग करना सही है? अद्यतन इस तरह से काम करता है।

अद्यतन करने के लिए फॉर्म का उपयोग करने का सही तरीका क्या है?

उत्तर

42

मैं django-crispy-form का मुख्य डेवलपर हूं। मुझे यकीन नहीं है कि मैं आपके प्रश्न का पालन करता हूं क्योंकि यह थोड़ा खराब रूप से स्वरूपित है। वास्तव में आप क्या करने की कोशिश कर रहे हैं?

django-crispy-form मॉडलफॉर्म के साथ काम करता है, वैसे ही सरल रूपों के साथ। यह Django के शीर्ष पर बैठता है, इसलिए यह इसके साथ गड़बड़ नहीं करता है। यह केवल आपके फॉर्म प्रतिपादन को नियंत्रित करता है, लेकिन यह नहीं बदलता कि सत्यापन कैसे काम करता है, फॉर्म उदाहरण कैसे बनाएं और इसी तरह।

संपादित करें:

मैं कैसे खस्ता-रूपों के साथ एक ModelForm करने के बारे में एक उदाहरण जोड़ रहा।

class ExampleModelForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(ExampleModelForm, self).__init__(*args, **kwargs) 

     # If you pass FormHelper constructor a form instance 
     # It builds a default layout with all its fields 
     self.helper = FormHelper(self) 

     # You can dynamically adjust your layout 
     self.helper.layout.append(Submit('save', 'save')) 

    class Meta: 
     model = ExampleModel 

मेरा मानना ​​है कि आपकी पहली समस्या यह है कि आप forms.ModelForm के बजाय forms.Form उपवर्गीकरण गया है। यही कारण है कि मैंने कहा था कि आपकी समस्या Django से संबंधित थी, क्रिस्टी-फॉर्म से संबंधित नहीं।

अपने ध्यान में रखते हुए

बाद में:

form = ExampleModelForm() 

अपने टेम्पलेट में:

{% load crispy_forms_tags %} 
{% crispy form %} 
+0

क्या मैं ModelForm के साथ उपयोग करने के लिए है क्या ज़रूरत है? – EsseTi

+0

मैंने जवाब संपादित किया है। – maraujop

+0

@maraujop: कृपया इस प्रश्न पर एक नज़र डालें: http://stackoverflow.com/questions/16581057/formhelper-object-has-no-attribute-append-while-using-crispy-forms-in-django यह समस्या तब आई जब मैं यहाँ क्या कह रहा था। –