You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Django员工管理系统的HTML表单设置两个提交动作?

为表单添加两个提交动作的解决方案

要实现同一个表单内「差评」扣薪和「好评」加薪的功能,你可以通过给两个提交按钮设置不同的name和value属性,在视图中判断点击的是哪个按钮,再执行对应的逻辑。具体步骤如下:

1. 修改模板文件(list_view.html)

将「好评」按钮改为type="submit",并给两个按钮添加name="action"和对应的value;同时把输入框的name改为更通用的amount(因为它既用于扣薪也用于加薪):

<form method="POST" action="{% url 'adjust_salary' yaroo.pk %}">
  {% csrf_token %}
  <input type="number" name="amount" placeholder="Enter amount" required>
  <!-- 差评按钮 -->
  <button type="submit" name="action" value="penalty" class="btn btn-secondary">
    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" 
      class="bi bi-hand-thumbs-down" viewBox="0 0 16 16">
      <path></path>
    </svg>
  </button>
  <p> | </p>
  <!-- 好评按钮 -->
  <button type="submit" name="action" value="praise" class="btn btn-secondary">
    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" 
       class="bi bi-hand-thumbs-up" viewBox="0 0 16 16">
      <path></path>
    </svg>
  </button>
</form>

2. 更新视图文件(views.py)

重命名视图类为更通用的名称,在post方法中根据action的值判断执行扣薪还是加薪逻辑,并调整短信内容:

from django.shortcuts import get_object_or_404, redirect
from django.views import generic
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
import requests
from .models import Employee

class AdjustSalaryView(LoginRequiredMixin, UserPassesTestMixin, generic.View):
    def post(self, request, pk):
        employee = get_object_or_404(Employee, pk=pk)
        action = request.POST.get('action')
        amount = int(request.POST.get('amount'))
        
        if action == 'penalty':
            employee.salary -= amount
            message = f"您的薪资已扣除{amount}元"
        elif action == 'praise':
            employee.salary += amount
            message = f"您的薪资已增加{amount}元"
        else:
            return redirect('home')
        
        employee.save()
        
        # 发送短信逻辑
        employee_phone_number = employee.phone_number  # 修正拼写错误:phon_number → phone_number
        api_key = '#'
        url = f'#/{api_key}/#'
        pay_load = {
            'sender': '#',
            'receptor': employee_phone_number,
            'message': message
        }
        requests.post(url, data=pay_load)
        
        return redirect('home')

    def test_func(self):
        return True

3. 更新URL配置(urls.py)

修改URL路径名称和视图类引用,使其更贴合新的功能:

from django.urls import path
from .views import AdjustSalaryView

urlpatterns = [
    path('adjust-salary/<int:pk>/', AdjustSalaryView.as_view(), name='adjust_salary'),  
]

关键说明:

  • 两个提交按钮通过name="action"和不同的value区分动作,视图中通过request.POST.get('action')获取用户点击的按钮类型。
  • 输入框名称改为amount,避免和单一功能绑定,提高复用性。
  • 修正了视图中phon_number的拼写错误,确保能正确获取员工手机号。
  • 短信内容根据动作动态生成,让员工清楚知道薪资变化的具体情况。

内容的提问来源于stack exchange,提问作者HesamHashemi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 14:53:09