序列化类用的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 - 效果图
修改
删除

添加

版权声明:本文为zsx1314lovezyf原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。