django-restful:购物车|django-restful:购物车 学习记录
【django-restful:购物车|django-restful:购物车 学习记录】购物车 就有 获取购物车详情 加入购物车 删除购物记录
同样 直接使用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=https://www.it610.com/article/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 existeddef update(self, instance, validated_data):
# 修改商品数量
# instance 是model 的实例
instance.nums = validated_data['nums']
instance.save()
return instance
推荐阅读
- 由浅入深理解AOP
- 继续努力,自主学习家庭Day135(20181015)
- python学习之|python学习之 实现QQ自动发送消息
- 一起来学习C语言的字符串转换函数
- 定制一套英文学习方案
- 漫画初学者如何学习漫画背景的透视画法(这篇教程请收藏好了!)
- 《深度倾听》第5天──「RIA学习力」便签输出第16期
- 如何更好的去学习
- 【韩语学习】(韩语随堂笔记整理)
- 焦点学习田源分享第267天《来访》