Tôi có một vài biểu mẫu tôi đã thêm vào trình hướng dẫn, nhưng trạng thái biểu mẫu chỉ được duy trì cho bước cuối cùng và thực hiện() không được thực hiện.Trạng thái SessionWizardView chỉ được lưu trên biểu mẫu cuối cùng, thực hiện() không được thực thi
Tôi đã tạo ra những điều sau đây, dựa trên các ví dụ về tài liệu của django, để cố gắng tìm hiểu phần cuối của điều này. Dường như bước cuối cùng là bước duy nhất để lưu trạng thái khi di chuyển giữa các bước.
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]]
và điều này cho các mẫu (cả one.html và two.html là giống hệt nhau)
<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>
Nếu tôi nhập dữ liệu trên bước 1, tiến hành bước 2 và nhập dữ liệu, sau đó quay lại bước 1, bước đầu tiên không có dữ liệu được lưu và không có lỗi biểu mẫu nào được hiển thị. Khi tôi nhấn bên cạnh để quay lại bước 2, dữ liệu của bước 2 vẫn còn hiện diện. Cố tình đưa dữ liệu không hợp lệ vào bước 1 đã cho tôi thấy rằng nó không xác thực biểu mẫu, vì thuật sĩ tiếp tục bước 2 mà không hiển thị lỗi.
Khi tôi gửi biểu mẫu, thực hiện() không thực thi. Điều này có ý nghĩa nếu chỉ bước cuối cùng thực sự thành công, nhưng không thấy lỗi nào ở bước 1 khiến tôi bối rối.
Tại sao dữ liệu biểu mẫu không được duy trì ngoại trừ biểu mẫu cuối cùng? Tại sao bước cuối cùng là bước duy nhất thực sự xác nhận dữ liệu biểu mẫu? Tại sao thực hiện không được thực thi?
Cập nhật: Có vẻ như việc xác thực biểu mẫu đang diễn ra sau đó và tôi thấy nó thành công qua việc in thông tin liên quan trong chức năng bài đăng, nhưng thực hiện() dường như vẫn chưa được thực thi.
Cảm ơn bạn.