Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Identify which submit button was clicked in Django form submit

Tags:

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" >&nbsp;Save&Home</button>   <button type="submit" >&nbsp;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}) 
like image 967
bbrooke Avatar asked Feb 01 '14 23:02

bbrooke


People also ask

How do you know which submit button was clicked Django?

And in your view in the related section, you can check which button is clicked by checkng its name.

How do you check if a submit button is clicked in Python?

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.

What happens when submit button is clicked?

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.


1 Answers

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">&nbsp;Save&Home</button> <button type="submit" name="save_next" value="Save&Next">&nbsp;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')) 
like image 100
FallenAngel Avatar answered Sep 28 '22 12:09

FallenAngel