0

我使用基于django类的视图来创建两个窗体(线程,消息)。如何使用两个不同的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 }} 

UPDATE:我使用下面的看法,但它不工作:

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 
+1

你可以从下面的链接得到帮助[同样的问题,您有,但他一直以不同的方式进行(http://stackoverflow.com/questions/ 18122096/django-class-views-updateview-with-two-model-forms-one-submit) –

回答

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有效期为好。

+0

它不工作!检查我的更新! – python

+0

嘿它现在工作!有些问题与'urls.py'文件:)我不需要两个类。 – python

+0

伟大的..欢呼的人.. :) –

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 
相关问题