必填字段django WizardView ModelForm

时间:2015-05-18 15:35:05

标签: python django django-forms formwizard

我的WizardView流程ModelForm有两步。我不明白为什么,当我第二步时,django告诉我需要以前的字段。我尝试在这样的步骤之间发送数据:

forms.py

class RequestForm1(forms.ModelForm):
    class Meta:
        model = Product
        fields = ('title', 'product_class', )

class RequestForm2(forms.ModelForm):
    class Meta:
       model = Product
       fields = ( 'dimension_x', )

views.py

class RequestView(SessionWizardView):

    instance = None

    def get_template_names(self):
        return [TEMPLATES[self.steps.current]]

    def get_form_initial(self, step):

        current_step = self.storage.current_step

        if current_step == 'step2':
            prev_data = self.storage.get_step_data('step1')

            print(prev_data)

            title = prev_data.get('step1-title', '')
            product_class = prev_data.get('step1-product_class', '')

            return self.initial_dict.get(step, {
                    'title': title,
                    'product_class': product_class
                    })

        return self.initial_dict.get(step, {})

    def done( self, form_list, **kwargs ):
        self.instance.save()
        return HttpResponseRedirect('/catalogue/request/')

1 个答案:

答案 0 :(得分:0)

请在下面找到我的解决方案

forms.py

class RequestForm1(forms.ModelForm):
    class Meta:
        model = Product
        fields = ('title', 'product_class', )


class RequestForm2(forms.ModelForm):

    class Meta:
        model = Product
        fields = ( 'title', 'product_class', 'dimension_x', )
        widgets = {
            'title': forms.HiddenInput(),
            'product_class': forms.HiddenInput()
        }

views.py

class RequestView(SessionWizardView):

    instance = None

    def get_template_names(self):
        return [TEMPLATES[self.steps.current]]

    def get_form_instance( self, step ):
        if self.instance is None:
            self.instance = Product()

        return self.instance

    def get_form(self, step=None, data=None, files=None):
        form = super(RequestView, self).get_form(step, data, files)
        if step == 'step2':
            prev_data = self.storage.get_step_data('step1')

            title = prev_data.get('step1-title', '')
            product_class = prev_data.get('step1-product_class', '')

            form.fields['title'].initial = title
            form.fields['product_class'].initial = product_class

        return form

    def done(self, form_list, **kwargs):

        self.instance.save()
        return HttpResponseRedirect('/catalogue/request/success')