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

时间:2015-12-09 10:58:08

标签: python django django-templates django-views django-class-based-views

我使用基于django类的视图来创建两个表单(Thread,Message)。

views.py

thread.html

两者都是渲染相同的html文件{{ form.as_p }} 。谁能告诉我如何在同一个模板中渲染两个表单?

thread.html

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

更新:我使用的是以下视图,但它无效:

indexPath

2 个答案:

答案 0 :(得分:2)

使用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的有效性。

答案 1 :(得分:1)

我这样做......

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