JAVA网络爬虫
HttpClient

导航

 

序列化类用的serializer, 修改数据时报错update() must be implemented.

在这里插入图片描述

  • 源码
    在这里插入图片描述
  • 解决方法重写序列化类里的update方法
    class ShopCartSerializer(serializers.Serializer):
    """
    购物车序列化类
    """
    # 因为我们模型类设置了unique_together 我们在这里用ModelSerializer
    
    # ModelSerializer里的create方法是从写的BaseSerializer的create方法
    
    # 还没就去create方法就会报错, 所以重写create方法也没用
    
    # Serializer里的create方法是继承的BaseSerializer的create方法
    
    # 所以我们这里只能用serializer
    
    # 获取当前用户
    user = serializers.HiddenField(
        default=serializers.CurrentUserDefault()
    )
    
    goods = serializers.PrimaryKeyRelatedField(required=True, label="商品", queryset=Goods.objects.all())
    
    nums = serializers.IntegerField(
        required=True,
        min_value=1,
        label="数量",
        error_messages={
            "min_value": "最小数量不能小于1",
            "required": "请选择购买数量",
            "blank": "请选择购买数量"
        }
    )
    
    def create(self, validated_data):
        """
        validated_data: 前端传递过来的数据并且validated了的
        :param validated_data: 前端传递过来的数据并且validated了的
        :return: 创建好的实例
        """
    
        # validated_data 是序列化了每一个字段都做过validated的数据
        # (列传递过来的是一个int类型的数据, validated_data里面已经是int类型的数据了)
    
        # initial_data 是没有调用validated的数据, 就是原始数据
    
        # 获取当前用户, 这里的request是放在context里面的
        user = self.context["request"].user
        # user: python
        print("user:", user)
        # validated_data: {'goods': < Goods: 新鲜水果甜蜜香脆单果约800克 >,
        # 'nums': 1, 'user': < SimpleLazyObject: < UserProfile: python >>}
        print("validated_data:", validated_data)
        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)
            existed.save()
    
        # 返回queryset对象
        return existed
    
    def update(self, instance, validated_data):
        """
        修改商品数量
        :param instance: 绑定model的实例
        :param validated_data: 前端传递过来的数据并且validated了的
        :return: 实例
        """
        instance.nums = validated_data["nums"]
        instance.save()
        return instance
    
  • 效果图
    修改
    在这里插入图片描述
    删除
    在这里插入图片描述
    在这里插入图片描述
    添加
    在这里插入图片描述
    在这里插入图片描述
posted on 2019-09-25 14:42  gmlgxx  阅读(208)  评论(0)    收藏  举报