繁体   English   中英

如何使用基于类的视图在同一模板上使用两个不同的Django Form

[英]How to use two different Django Form at the same template using class based view

我正在使用基于django类的视图来创建两种形式(线程,消息)。

views.py

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

    def form_valid(self, form):
        # This method is called when valid form data has been POSTed.
        # It should return an HttpResponse.
        return super(ThreadForm, self).form_valid(form)

class MessageForm(FormView):
    template_name = 'thread.html'
    form_class = MessageModelForm
    success_url = '/success'

    def form_valid(self, form):
        # This method is called when valid form data has been POSTed.
        # It should return an HttpResponse.
        return super(MessageForm, self).form_valid(form)

两者都呈现相同的html文件thread.html 谁能告诉我如何在同一个模板中同时渲染两个表单?

thread.html

{{ form.as_p }}

更新:我正在使用下面的视图,但它不起作用:

class MessageForm(FormView):
    template_name = 'thread.html'
    success_url = '/success'

    def form_valid(self, form):
        # This method is called when valid form data has been POSTed.
        # It should return an HttpResponse.
        return super(MessageForm, self).form_valid(form)

    def get_context_data(self, **kwargs):
        context = super(MessageForm, self).get_context_data(**kwargs)
        context['second_form'] = MessageModelForm
        return context

为此使用get_context_data方法。

def get_context_data(self, **kwargs):
    context = super(FormViewName, self).get_context_data(**kwargs)
    context['second_form'] = SecondForm
    return context

然后,您可以在模板中使用

{{ second_form.as_p }}

同样在form_valid方法中,您还必须检查second_form的有效性。

我就是这样...

class SolicitudUpdate(UpdateView):
    model = Solicitud
    second_model = Persona
    template_name = 'adopcion/solicitud_form.html'
    form_class = SolicitudForm
    second_form_class = PersonaForm
    success_url = reverse_lazy('adopcion:solicitud_listar')


    def get_context_data(self, **kwargs):
        context = super(SolicitudUpdate, self).get_context_data(**kwargs)
        pk = self.kwargs.get('pk', 0)
        solicitud = self.model.objects.get(id=pk)
        persona = self.second_model.objects.get(id=solicitud.persona_id)
        if 'form' not in context:
            context['form'] = self.form_class()
        if 'form2' not in context:
            context['form2'] = self.second_form_class(instance=persona)
        context['id'] = pk
        return context

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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