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

Django电商平台单次点击下单生成两条订单问题求助

问题根因

1. 无效金额校验导致订单直接被标记完成

你写的金额校验逻辑完全没有实际作用:

total = order.get_cart_totals
# 刚把total赋值为order.get_cart_totals,此处判断永远为真
if total == order.get_cart_totals:
    order.complete = True
order.save()

这段代码会把get_or_create查询到的未完成订单,直接强制标记为已完成状态入库。

2. 重复请求触发二次订单创建

当前端点击下单按钮时如果短时间内发起了两次请求:

  • 第一次请求到达后,查询/新建未完成订单,直接标记为已完成保存
  • 第二次请求到达后,因为不存在符合customer=当前用户, complete=False条件的订单,get_or_create会直接新建一条新的未完成订单
    最终就会出现你遇到的“一条已完成、一条未完成”的两条订单记录。

修复方案

1. 修正金额校验逻辑

校验前端传递的订单总金额和后端计算的购物车金额是否一致,避免自校验:

# 此处字段名根据你前端实际传参结构调整
front_total = float(data['order']['total'])
back_total = order.get_cart_totals
if front_total == back_total:
    order.complete = True
    print("Total equals")
order.save()

2. 增加防重复提交限制

二选一即可:

  • 前端侧:点击下单按钮后立即置灰禁用,直到接口返回结果后再恢复,避免重复点击、事件冒泡触发两次请求
  • 后端侧:给接口加幂等校验,比如下单前前端先获取唯一的下单凭证,同一个凭证只能处理一次,或者用用户ID+1秒时间窗口拦截重复请求

3. 优化交易号生成规则

不要用时间戳作为交易号,时间戳精度仅到秒,同一秒内的请求会生成相同交易号,建议用UUID生成唯一值:

import uuid
transaction_id = str(uuid.uuid4())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:15:03