如何为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
相关产品推荐
相关产品推荐

