Django披萨店系统点击按钮更新订单模型状态字段实现咨询
实现步骤
1. 新增路由配置
在你应用的urls.py文件中添加订单状态更新的路由:
from django.urls import path from . import views urlpatterns = [ # 保留原有路由不变,新增如下路由 path('order/complete/<int:order_id>/', views.complete_order, name='complete_order'), # 确保你的订单列表路由设置了name为orders,示例: # path('orders/', views.OrderView.as_view(), name='orders'), ]
2. 新增状态更新视图函数
在views.py中添加处理订单完成请求的逻辑:
from django.shortcuts import get_object_or_404, redirect # 保留原有代码不变,新增如下函数 def complete_order(request, order_id): if request.method == "POST": order = get_object_or_404(OrderPizza, id=order_id) # 仅当订单处于配送中状态时允许修改为已完成,避免重复提交 if order.status == OrderPizza.STATUS_DELIVERED: # 修改订单状态为已完成 order.status = OrderPizza.STATUS_EXECUTE order.save() # 同步更新对应骑手的完成订单数 order.courier.count_order += 1 order.courier.save() # 处理完成后跳转回订单列表页 return redirect('orders')
3. 修改订单列表模板
更新listOrder.html中的表单部分,绑定对应订单ID、添加CSRF校验:
<tr><td> <form method="post" action="{% url 'complete_order' i.order.id %}"> {% csrf_token %} <!-- 非配送中状态的订单按钮置灰,避免误操作 --> {% if i.order.status == 'Доставляется' %} <button type="submit">Заказ доставлен</button> {% else %} <button type="button" disabled>Заказ доставлен</button> {% endif %} </form> </td><tr>
修改完成后重启服务即可测试功能:点击配送中订单的「Заказ доставлен」按钮,订单状态会自动更新为「Исполнен(订单已完成)」,对应骑手的完成订单数也会同步+1。
内容的提问来源于stack exchange,提问作者Яков Лукьянец
相关产品推荐
相关产品推荐

