【问题标题】:Identify which submit button was clicked in Django form submit确定在 Django 表单提交中单击了哪个提交按钮
【发布时间】:2014-02-25 15:13:28
【问题描述】:

在 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-->

查看

@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})

【问题讨论】:

    标签: django django-forms django-views


    【解决方案1】:

    你可以给他们起名字。只有单击的按钮通过提交发送数据。在你的模板中给他们适当的名字:

    <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>
    

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

    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'))
    

    【讨论】:

    • 完美!感谢您的反馈
    • 我必须添加到答案中的一件事是每个按钮的“value=1”。
    • 它仅适用于 。不适用于按钮。
    • 不要忘记为按钮添加价值。它会像魅力一样起作用!
    • 如果有多个按钮,理想的方法是什么?我不喜欢为所有这些人写 if else 阶梯。
    【解决方案2】:

    在 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'))
    

    【讨论】:

      猜你喜欢
      • 2013-03-12
      • 2012-03-01
      • 1970-01-01
      • 2014-07-15
      • 1970-01-01
      • 2011-08-09
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      相关资源
      最近更新 更多