2017-07-19 10 views
0

テンプレートには2つのフォームがあります。現時点では、2つの送信ボタンがあります。 これらを1つの送信ボタンに結合しますか?Djangoで1つのサブミットで2つのフォームを提出する

以下のコードは、AnswerFormという1つのフォームのみを更新しています。 AnswerReplyFormはどうやって更新できますか?

クラスAnswerView(ObjectEditView):一般的に

form_class = forms.AnswerReplyForm 
answer_form = forms.AnswerForm 

model = AnswerReply 


def get(self, request, pk): 

    answer = get_object_or_404(Answer, pk = pk) 
    answer_reply = AnswerReply.objects.filter(answer_id = pk).order_by('-id') 
    self.answer_form = self.answer_form(instance=answer) 
    return render(request, 'helpdesk/answer.html', { 
     'answer': answer, 
     "answer_reply" : answer_reply, 
     'obj_type': 'answer reply', 
     'form': self.form_class, 
     "form2":self.answer_form, 
     "pre_reply_from" : self.predefined_reply_form 
    }) 

def post(self, request, pk, *args, **kwargs): 
    answer = get_object_or_404(Answer, id=pk) 
    answer_reply = AnswerReply.objects.filter(answer_id = pk).order_by('-id') 
    self.answer_form = self.answer_form(instance=answer) 

    obj = self.model() 
    obj = self.alter_obj(obj, request, args, kwargs) 

    form = self.form_class(request.POST, request.FILES, instance=obj) 

    if form.is_valid(): 
     form.instance.answer_id = pk 
     obj_created = not form.instance.pk 
     obj = form.save() 


    return render(request, 'helpdesk/answer.html', { 
     'answer': answer, 
     "answer_reply" : answer_reply, 
     'obj_type': 'answer reply', 
     'form': self.form_class, 
     "form2":self.answer_form, 
    }) 
+0

役立つことを願って(HTTPS [ジャンゴ送信ボタンを1と2つの異なる形式を提出]://stackoverflow.c om/questions/18489393/django-submit-two-different-forms-with-one-submit-button) –

答えて

1

:あなたのテンプレートファイルで

if request.method == 'POST': 
    form_1 = FormOne(request.POST) 
    form_2 = FormTwo(request.POST) 

    if form_1.is_valid() and form_2.is_valid(): 
     form_1.save() 
     form_2.save() 
     return #Write your return here, something like HttpResposeRedirect or whatever you need to do after saving both form successfully 

else: 
    form_1 = FormOne() 
    form_2 = FormTwo() 

context = { 
    'form1': form_1, 
    'form2': form_2 
} 

return render(request, 'template.html', context) 

<form> 
{{ form1 }} 
{{ form2 }} 
<input type="submit" value= "submit"> 
</form> 

それは動作します。

0

それはそれぞれ(表示、ルートテンプレート)のための構造を定義することをお勧めです

そして、所望の条件に基づいて、構造の表示一方(それらのいずれかにリダイレクト):

例えば決定ビュー:

def decisionView(request): 
    route = '/route/1' 
    if condition: 
     route = '/route/2' 
    return redirect(route) 

私はこれがあなた複製可能

関連する問題