|
出错后台代码
class OrderCommitView(View):
"""创建订单"""
def post(self, request):
"""创建订单"""
# 获取登录的用
user = request.user
if not user.is_authenticated:
# 用户未登录
return JsonResp**e({'res': 0, 'errmsg': '用户未登录,请先登录再进行操作'})
# 获取参数
addr_id = request.POST.get('addr_id')
pay_method = request.POST.get('pay_method')
sku_ids = request.POST.get('sku_ids')
# 校验数据
if not all([addr_id, pay_method, sku_ids]):
return JsonResp**e({'res': 1, 'errmsg': '参数不完整'})
# 校验支付方式
if pay_method not in OrderInfo.PAY_METHODS.keys():
return JsonResp**e({'res': 2, 'errmsg': '支付方式不存在'})
# 校验地址
try:
addr = Address.objects.get(id=addr_id)
except Address.DoesNotExist:
return JsonResp**e({'res': 3, 'errmsg': '收货地址不存在'})
# 业务处理:创建订单
# 组织参数
# 订单id:20190509200343(创建订单的时间)+用户id
order_id = datetime.now().strftime('%Y%m%d%H%M%S')+str(user.id)
# 运费
transit_price = 10
# 总数目和总金额
total_count = 0
total_price = 0
# 想df_order_info表中添加一条记录
order = OrderInfo.objects.create(order_id=order_id,
user=user,
addr=addr,
pay_method=pay_method,
total_count=total_count,
total_price=total_price,
transit_price=transit_price)
# 用户的订单中有几件商品就需要向df_order_goods表中添加几条记录
conn = get_redis_connection('default')
cart_key = 'cart_%d' % user.id
sku_ids = sku_ids.split(',')
sku_ids.append(-1)
for sku_id in sku_ids:
# 获取商品的信息
try:
sku = GoodsSKU.objects.get(id=sku_id)
except GoodsSKU.DoesNotExist:
return JsonResp**e({'res': 4, 'errmsg': '商品不存在'})
# 从redis中获取用户所需购买的商品的数量
count = conn.hget(cart_key, sku_id)
# 向df_order_goods表中添加一条记录
OrderGoods.objects.create(order=order,
sku=sku,
count=count,
price=sku.price)
# 更新商品的库存和销量
sku.stock -= int(count)
sku.sales += int(count)
sku.save()
# 累加计算订单的总数量和总金额
amount = sku.price*int(count)
total_count += int(count)
total_price += amount
# 更新订单信息表中的总数量和总金额
order.total_count = total_count
order.total_price = total_price
order.save()
# 买完商品后清除用户购物车中的相关记录
conn.hdel(cart_key, *sku_ids)
# 返回应答
return JsonResp**e({'res': 5, 'message': '订单创建成功'})
出错原因
django.db.utils.IntegrityError: (1048, "Column 'count' cannot be null")
[10/May/2019 21:14:59] "POST /order/commit HTTP/1.1" 500 24353
但是我通过调试得到
调试_01
前两个都是正常的
通过第三张图可以看出 明明获取到值了,可是到写入redis数据库时却变成了None类型的
前台页面
不是很明白,希望各位大佬 救救孩子吧~
|
|