订单完成
-
订单结算页面
- 订单展示用的序列化器
# 前端需要运费数据和商品信息数据的字典列表,这里使用嵌套序列化器返回数据 class CartSKUSerializer(serializers.ModelSerializer): # 因为商品表没有count字段,所以要定义它 count=serializers.IntegerField() class Meta: model=SKU fields=('id','name', 'default_image_url', 'price', 'count') class OrderSettlementSerializer(serializers.Serializer): freight = serializers.DecimalField(max_digits=10,decimal_places=2) skus = CartSKUSerializer(many=True)
- 视图实现业务逻辑
class OrderSettlementView(APIView): def get(self, request): user=request.user conn=get_redis_connection('cart') cart_dict=conn.hgetall('cart_%s'%user.id) cart_list=conn.smembers('cart_selected_%s'%user.id) cart={ } for sku_id in cart_list: cart[sku_id]=cart_dict[sku_id]['count'] skus=SKU.objects.filter(id__in=cart.keys()) for sku in skus: sku.count=cart[sku.id]['count'] freight=Decimal(10.00) serializer=OrderSettlementSerializer({ 'freight':freight,'skus':skus}) return Response(serializer.data)
-
保存订单, 视图逻辑由CreateAPIView提供, 我们需要重写序列化器的保存操作
class SaveOrderView(CreateAPIView): serializer_class= SaveOrderSerializer class SaveOrderSerializer(serializers.ModelSerializer): class Meta: model = OrderInfo fields