user866933
user866933

Reputation: 335

Submit two forms in a single submit in Django

I have two forms in template. At the moment I have two submit buttons. Would like to combine those to a single submit button.

Below code is now updating only one form, that's AnswerForm. How i can update AnswerReplyForm along with that?

class 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,
    })

Upvotes: 0

Views: 2149

Answers (2)

Hadi Farhadi
Hadi Farhadi

Reputation: 1761

It's better to define a structure for each one (View, route and template)

Then, based on desired condition, display one of the structures (redirect to one of them):

for example decision view:

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

i hope this could help you

Upvotes: 0

Piyush Maurya
Piyush Maurya

Reputation: 2015

In general:

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)

In your template file

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

It will work.

Upvotes: 2

Related Questions