解决方法重写序列化类里的update方法class ShopCartSerializer(serializers.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: 创建好的实例
"""
user = self.context["request"].user
print("user:", user)
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()
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