In Django「保存してホーム」と「保存して次へ」の2つの送信ボタンオプションがあるフォームが欲しいのですが。
ビューでクリックされた送信ボタンを特定する方法について何か考えはありますか?
私はフォームのプログラミング/操作にかなり慣れていないので、フィードバックに感謝します。
フォーム
<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-->
表示
@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})
あなたは彼らに名前を付けることができます。クリックされたボタンのみが送信でデータを送信します。テンプレートで適切な名前を付けます。
<button type="submit" name="save_home" value="Save&Home"> Save&Home</button>
<button type="submit" name="save_next" value="Save&Next"> Save&Next</button>
また、関連セクションのビューでは、名前をチェックすることで、どのボタンがクリックされたかを確認できます。
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'))
Django 2.xでは、ビューメソッド@FallenAngelの回答にわずかな変更があります
if request.method == 'POST':
form = PriceAssessmentSection1(request.POST)
# Note change below
if 'save_home' in request.POST:
return HttpResponseRedirect(reverse('portal_home'))
# Note change below
Elif 'save_next' in request.POST: # You can use else in here too if there is only 2 submit types.
return HttpResponseRedirect(reverse('portal_sec2'))