代码之家  ›  专栏  ›  技术社区  ›  Lorenzo Fiamingo

如何以相同的形式使用两个具有两个不同动作的按钮?

  •  0
  • Lorenzo Fiamingo  · 技术社区  · 7 年前

    我有一个表单,有两个按钮/输入。

    按钮2保存页面并转到另一个url。

    Button1正在使用 type=“提交” 然后view.py获取数据,保存并刷新数据。

    formaction=“{%url”团队\区域:主“%” 实际上是重定向我,但问题是它不能保存数据。按钮1仍然可以正常工作。

    是否可能有某种请求。按的\u按钮的\u id\u要在view.py中使用?


    如果有帮助,请参阅我的相关文件:

    修改_players.html

    <h1>AREA SQUADRA</h1>
    <form method="post" action="">
      {% csrf_token %}
      <h2>Giocatori</h2>
      {{ player_formset.management_form }}
      {% for player_form in player_formset %}
        {% if forloop.last %}
          {% if not forloop.first %}
            <input type="submit" value="Salva" formaction="{% url 'team_area:home' %}">
          {% endif %}
          <h5>Nuovo giocatore:</h5>
        {% endif %}
        {% for field in player_form %}
          {% if forloop.revcounter == 2 %}
            {{ field }}
          {% elif forloop.parentloop.last and forloop.last%}
          {% else %}
            {{ field.label_tag }} {{ field }}
          {% endif %}
        {% endfor %}
          <br>
      {% endfor %}
      <input type="submit" value="Aggiungi">
      </form>
    

    views.py

    @login_required(login_url="/accounts/login/")
    def modify_players(request):
        if request.user.team is not None:
            PlayerFormSet = modelformset_factory(Player, form=PlayerForm, extra=1, can_delete=True,)
    
            if request.method == "POST":
                player_formset = PlayerFormSet(request.POST, request.FILES, queryset=Player.objects.all().filter(team=request.user.team),)
                for player_form in player_formset:
                    if player_form.is_valid():
                        player = player_form.save(commit=False)
                        player.team = request.user.team
                if player_formset.is_valid():
                    player_formset.save()
    
                return redirect('team_area:modify_players')
            else:
                player_formset = PlayerFormSet(queryset=Player.objects.all().filter(team=request.user.team))
            return render(request, 'team_area/modify_players.html', {'player_formset': player_formset})
        else:
            return redirect('team_area:home')
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   xyres    7 年前

    你的评论澄清了一些事情。

    去除 formaction input 以便两个按钮将表单提交到同一视图。

    给这两个按钮一个通用的名称 name 但不同 value . 然后在视图中,您可以区分单击了哪个按钮。

    html:

    <input type="submit" name="submit_button" value="button1">
    <input type="submit" name="submit_button" value="button2">
    

    视图:

    def modify_players(...):
        ...
        # save data
        ...
    
        submit_button = request.POST.get('submit_button')
        if submit_button == 'button1':
            # refresh page
        else:
            # redirect to some page