मेरे पास कई रूप हैं जिन्हें मैंने विज़ार्ड में जोड़ा है, लेकिन फॉर्म स्टेट केवल अंतिम चरण के लिए बनाए रखा गया है, और किया गया() निष्पादित नहीं किया गया है।सत्र विज़ार्ड दृश्य राज्य केवल अंतिम फॉर्म पर सहेजा गया, किया गया() निष्पादित नहीं किया गया
मैंने निम्न के नीचे जाने की कोशिश करने के लिए, डीजेंगो के दस्तावेज़ीकरण पर उदाहरणों के आधार पर निम्नलिखित बनाया है। ऐसा लगता है कि अंतिम चरण ही एकमात्र ऐसा है जो चरणों में आगे बढ़ते समय राज्य को बचाता है।
class OneForm(Form):
field_one = forms.CharField(label='1', max_length=100)
field_two = forms.CharField(label='2', max_length=100)
field_three = forms.CharField(label='3', max_length=100)
class TwoForm(Form):
field_one = forms.CharField(label='4', max_length=100)
field_two = forms.CharField(label='5', max_length=100)
field_three = forms.CharField(label='6', max_length=100)
TEST_WIZARD_FORMS = [
("one", OneForm),
("two", TwoForm),
]
TEST_TEMPLATES = {
'one': 'tour/one.html',
'two': 'tour/two.html',
}
class TestWizardView(SessionWizardView):
form_list = TEST_WIZARD_FORMS
def done(self, form_list, **kwargs):
print('done executed')
return reverse('home')
def get_template_names(self):
return [TEST_TEMPLATES[self.steps.current]]
और इस टेम्पलेट के लिए (दोनों one.html और two.html समान हैं)
<html>
<body>
<p>Step {{ wizard.steps.step1 }} of {{ wizard.steps.count }}</p>
<form action="" method="post">{% csrf_token %}
<table>
{{ wizard.management_form }}
{% if wizard.form.forms %}
{{ wizard.form.management_form }}
{{ wizard.form.non_field_errors }}
{{ wizard.form.errors }}
{% for form in wizard.form.forms %}
{{ form }}
{% endfor %}
{% else %}
{{ wizard.form }}
{% endif %}
</table>
{% if wizard.steps.prev %}
<button name="wizard_goto_step" type="submit" value="{{ wizard.steps.first }}">"first step"</button>
<button name="wizard_goto_step" type="submit" value="{{ wizard.steps.prev }}">"prev step"</button>
{% endif %}
<button name="wizard_goto_step" type="submit" value="{{ wizard.steps.next }}">"next step"</button>
<input type="submit" value="submit"/>
</form>
</body>
</html>
अगर मैं चरण 1 पर डेटा दर्ज, 2 कदम और डेटा दर्ज करें, फिर कदम पर लौटने के लिए आगे बढ़ना 1, पहले चरण में कोई डेटा सहेजा नहीं गया है और कोई फॉर्म त्रुटियां प्रदर्शित नहीं हुई हैं। जब मैं चरण 2 पर वापस जाने के बाद हिट करता हूं, तो चरण 2 का डेटा अभी भी मौजूद है। जानबूझकर चरण 1 पर अमान्य डेटा डालने से मुझे पता चला है कि यह फ़ॉर्म को मान्य नहीं करता है, क्योंकि विज़ार्ड त्रुटियों को प्रदर्शित किए बिना चरण 2 जारी रखता है।
जब मैं फॉर्म जमा करता हूं, किया जाता है() निष्पादित नहीं होता है। यह समझ में आता है कि केवल अंतिम चरण वास्तव में सफल है, लेकिन चरण 1 पर कोई त्रुटि नहीं देखते हुए मुझे परेशान किया गया है।
अंतिम रूप को छोड़कर फॉर्म डेटा क्यों नहीं बनाए रखा जाता है? अंतिम चरण केवल एकमात्र ऐसा क्यों है जो वास्तव में फॉर्म डेटा को मान्य करता है? निष्पादित क्यों नहीं किया जाता है?
अद्यतन: ऐसा प्रतीत होता है कि फॉर्म सत्यापन बाद में हो रहा है, और मुझे लगता है कि यह पोस्ट फ़ंक्शन में प्रासंगिक जानकारी प्रिंटिंग के माध्यम से सफल रहा है, लेकिन किया गया() अभी भी निष्पादित नहीं लगता है।
धन्यवाद।