简体   繁体   中英

Required field django WizardView ModelForm

I have two step of my WizardView process based ModelForm . I don't understand why, when I valide the second step django says me that a previous field are required. I try to send data between step like that:

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/')

Please find below my solution

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')

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM