美文网首页django-rest-framework
django-restful:购物车 学习记录

django-restful:购物车 学习记录

作者: 你常不走的路 | 来源:发表于2018-01-10 20:49 被阅读56次

    购物车 就有 获取购物车详情 加入购物车 删除购物记录
    同样 直接使用mixins 中的 就够了

    view 这里面没有一个陌生的 基本都是前面学习过了的

    class ShoppingCartViewset(viewsets.ModelViewSet):
        """
        购物车功能
        list:
            获取购物车详情
        create:
            加入购物车
        delete:
            删除购物记录
        """
        permission_classes = (IsAuthenticated, IsOwnerOrReadOnly)
        authentication_classes = (JSONWebTokenAuthentication, SessionAuthentication)
        # serializer_class = ShopCartSerializer
        lookup_field = 'goods_id'
    
        def get_queryset(self):
            # 获取属于用户的购物车list
            return ShoppingCart.objects.filter(user=self.request.user)
    
        def get_serializer_class(self):
            if self.action == 'list':
                return ShopCartDetailSerializer
            else:
                return ShopCartSerializer
    

    serializer

    #购物车详情
    class ShopCartDetailSerializer(serializers.ModelSerializer):
        goods = GoodsSerializer(many=False,read_only=True)  
        #购物车详情中 一个商品只能有一个 
        #如果用户对一个商品多次购买  就进行数量累加 
        #而下面这个 serializer 就不用  可以多样显示
        class Meta:
            model = ShoppingCart
            fields = "__all__"
    
    #购物车
    class ShopCartSerializer(serializers.Serializer):  # 为什么不使用modelserializer 可以去看model中的解释
        user = serializers.HiddenField(
            default=serializers.CurrentUserDefault()
        )
        goods = serializers.PrimaryKeyRelatedField(queryset=Goods.objects.all(), required=True)
        nums = serializers.IntegerField(label="数量", required=True, min_value=1, error_messages={
            'min_value': "商品数量不能小于一",
            "required": "请选择购买数量",
        })
      #这里就是重写create方法 因为 本身的serializer验证不能通过
        def create(self, validated_data):
            user = self.context['request'].user  # 上下文
            nums = validated_data['nums']
            goods = validated_data['goods']
    
            existed = ShoppingCart.objects.filter(user=user, goods=goods)
            if existed:
                existed = existed[0]
                existed.nums += nums
                existed.save()
            else:
                existed = ShoppingCart.objects.create(**validated_data)  # 创建这个购物车内容
    
            return existed
    
        def update(self, instance, validated_data):
            # 修改商品数量
            # instance 是model 的实例
            instance.nums = validated_data['nums']
            instance.save()
            return instance
    

    相关文章

      网友评论

        本文标题:django-restful:购物车 学习记录

        本文链接:https://www.haomeiwen.com/subject/xplanxtx.html