How to validate mulitple forms in a single formView class Django

萝らか妹 提交于 2019-12-03 21:24:57

I do use FormView (or CreateView, UpdateView, etc.) This is what I do:

class ThreadForm(FormView):
    template_name = 'thread.html'
    form_class = ThreadModelForm
    ...

    def get_second_form(self):
       # logic to construct second form goes here
       # if self.request.method == 'POST' you need to pass self.request.POST
       # to the form. Add whatever you need to create the form
       if self.request.method == 'POST':
          return SecondForm(self.request.POST)
       else:
          return SecondForm()

    def form_valid(self, form):
        self.second_form = self.get_second_form()
        if self.second_form.is_valid():
            # All good logic goes here, which in the simplest case is
            # returning super.form_valid
            return super(ThreadForm, self).form_valid(form)
        else:
            # Otherwise treat as if the first form was invalid
            return super(ThreadForm, self).form_invalid(form)

    # Do this only if you need to validate second form when first form is
    # invalid
    def form_invalid(self, form):
        self.second_form = self.get_second_form()
        self.second_form.is_valid()
        return super(ThreadForm, self).form_invalid(form)

    # Trick is here
    def get_context_data(self, **kwargs):
        context = super(ThreadedForm, self).get_context_data(**kwargs)
        context['second_form'] = getattr(self, 'second_form', self.get_second_form())
        return context
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!