确定在Django表单提交中单击了哪个提交按钮

bbr*_*oke 16 django django-forms django-views

在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" >&nbsp;Save&Home</button>

 <button type="submit" >&nbsp;Save&Next</button>

</form> <!-- end form-->
Run Code Online (Sandbox Code Playgroud)

视图

@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})
Run Code Online (Sandbox Code Playgroud)

Fal*_*gel 32

你可以给他们起名字.只需单击按钮即可通过提交发送数据.在模板中为它们指定适当的名称:

<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>
Run Code Online (Sandbox Code Playgroud)

在相关部分的视图中,您可以通过检查其名称来检查单击了哪个按钮.

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'))
Run Code Online (Sandbox Code Playgroud)

  • 我必须添加到答案的一件事是每个按钮的"值= 1". (5认同)
  • 不要忘记为按钮添加值。它会像魅力一样工作! (3认同)
  • 如果有多个按钮,理想的方法是什么?我不喜欢为所有人编写 if else 梯子。 (3认同)
  • 它仅适用于 &lt;input type="submit"&gt;。不适用于按钮。 (2认同)

mb_*_*atx 7

在 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'))
Run Code Online (Sandbox Code Playgroud)