Django表单向导动态表单不保存数据

时间:2018-01-12 19:19:27

标签: django python-3.x django-formwizard

目前正在发生:

  • 正在显示动态生成的表单和表单字段。
  • 在所述字段中输入一些数据,但self.get_all_cleaned_data()不返回任何内容。
  • 表单返回第0页,而不是使用done()
  • 提交表单

我想要发生什么:   - 返回时或保留页面中要保留和显示的字段中的数据   - 表格实际提交并使用done()来处理和保存

以下是我的forms.py

class OrderForm(forms.Form):
    class Meta:
        localized_fields = ('__all__',)

    def __init__(self, *args, **kwargs):
        self.fields = kwargs.pop('fields')
        fields = self.fields
        super(OrderForm, self).__init__(*args, **kwargs)
        if not isinstance(fields, str):
            for i in fields.fields.all():
                widget = forms.TextInput()
                _type = forms.CharField

                if i.field_type == Field.TEXTAREA_FIELD:
                    widget = forms.Textarea
...
        self.fields[i.name] = _type(**fields)

这应该是获取数据库创建的表单和字段数据并相应地生成字段。例如:

表格A有字段:

  • 名称(常规文本字段)
  • 地址(Textarea)

然后,上面的代码将为这些代码生成字段。

下一段代码来自我的views.py文件

FORM_TEMPLATES = {
    "0": 'order/details.html',
    "1": 'order/details.html',
    "2": 'order/details.html',
    "3": 'order/details.html',
    "4": 'order/details.html',
    "confirm": 'order/confirm.html',
}

class Order(SessionWizardView):
    form_list = [OrderForm]

    def get_current_step_form(self, company, *args, **kwargs):
        step_form = [Form.objects.all()]
        step_form.append('Confirm')
        return step_form

    def get_context_data(self, form, **kwargs):
        context = super(Order, self).get_context_data(form=form, **kwargs)            

        # Returns {}, but I want this to return all previous field values
        context.update({
            'all_data': self.get_all_cleaned_data(),
        })
       return context

    def post(self, *args, **kwargs):
        go_to_step = self.request.POST.get('wizard_goto_step', None)
        form = self.get_form(data=self.request.POST)

        current_index = self.get_step_index(self.steps.current)
        goto_index = self.get_step_index(go_to_step)

        if current_index > goto_index:
            self.storage.set_step_data(self.steps.current,
                self.process_step(form))
            self.storage.set_step_files(self.steps.current,
                self.process_step_files(form))

        return super(Order, self).post(*args, **kwargs)

    def get_form(self, step=None, data=None, files=None):
        """
        Get the form and add to form_list
        """
        form = super(Order, self).get_form(step, data, files)
        company = ...
        get_forms = self.get_current_step_form(company=company)
        form_list_value = dict(self.form_list)['0']

        while len(self.form_list.items()) < len(get_forms):
            self.form_list.update({str(len(self.form_list.items())): form_list_value})

        return form


    def done(self, form_list, **kwargs):
       return HttpResponse("View")

done()是一项正在进行中的工作,但它似乎甚至无法达到这一点,因为它始终从(例如)表格0-1-2-3-0-开始。

确认表单不会包含前几页的任何字段值,只会返回{}

任何帮助将不胜感激,

由于

0 个答案:

没有答案