In Django I would like to have a form with 2 submit button options. "save & home" and "save & next".
Any thoughts how I can identify which submit button was clicked in my view?
I'm fairly new to programming/working with forms and appreciate the feedback.
Form
<form action="{% url 'price_assessment_section_1' component.id %}" method="post"> {% csrf_token %} {{ form.s1_q5_resin_type }} <!-- FORM SUBMIT BUTTONS--> <button type="submit" > Save&Home</button> <button type="submit" > Save&Next</button> </form> <!-- end form-->
View
@login_required def price_assessment_section_1(request, component_id): component = Component.objects.get(id=component_id) if request.method == 'POST': form = PriceAssessmentSection1(request.POST) # if "save & home" go to: return HttpResponseRedirect(reverse('portal_home')) # if "save & next" go to: return HttpResponseRedirect(reverse('portal_sec2')) form = PriceAssessmentSection1() return render(request, 'portal/price_assessment_section_1.html', {'form': form, 'component':component})
And in your view in the related section, you can check which button is clicked by checkng its name.
get('Submit'). Remember that 'Submit' is what the value attribute of the submit button is set to. You can then write an if statement that only executes code if the submit button is clicked. If the submit button is equal to NoneType, then this if statement would be false and the ensuing code would not execute.
The form will be submitted to the server and the browser will redirect away to the current address of the browser and append as query string parameters the values of the input fields.
You can give them names. Only clicked buttons send their data with submit. In your template give them appropriate names:
<button type="submit" name="save_home" value="Save&Home"> Save&Home</button> <button type="submit" name="save_next" value="Save&Next"> Save&Next</button>
And in your view in the related section, you can check which button is clicked by checkng its name.
if request.method == 'POST': form = PriceAssessmentSection1(request.POST) if request.POST.get("save_home"): return HttpResponseRedirect(reverse('portal_home')) elif request.POST.get("save_next"): # You can use else in here too if there is only 2 submit types. return HttpResponseRedirect(reverse('portal_sec2'))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With