Django+DRF框架之分类获取序列化器

1.序列化器

from rest_framework import serializers

from cart.models import Cart
from goods.models import GoodsGroup, Goods, Detail, GoodsBanner, Collect
from goods.serializers import GoodsSerializers


class CartSerializers(serializers.ModelSerializer):
    """商品分类序列化器"""

    class Meta:
        model = Cart
        fields = "__all__"


class ReadCartSerializers(serializers.ModelSerializer):
    """商品分类序列化器"""
    goods = GoodsSerializers()

    class Meta:
        model = Cart
        fields = "__all__"

2.视图类

from rest_framework import mixins, status
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.viewsets import GenericViewSet

from cart.models import Cart
from cart.serializers import CartSerializers, ReadCartSerializers


class CartView(GenericViewSet, mixins.CreateModelMixin, mixins.ListModelMixin):
    serializer_class = CartSerializers
    queryset = Cart.objects.all()
    # 设置认证用户才能有访问权限
    permission_classes = [IsAuthenticated]

    # 重写获取序列化器的方法,用于区分是读数据还是写数据
    def get_serializer_class(self):
        """ 实现读写操作不用的序列化器 """
        if self.action == 'list':
            return ReadCartSerializers
        else:
            return self.serializer_class

    def create(self, request, *args, **kwargs):
        # 获取用户信息
        user = request.user
        # 获取参数
        goods = request.data.get('goods')
        # 1. 校验用户的购物车是否有此商品
        if Cart.objects.filter(user=user, goods=goods).exists():
            # 这个用户已经添加过该商品到购物车,直接修改商品数量
            cart_obj = Cart.objects.get(user=user, goods=goods)
            cart_obj.number += 1
            cart_obj.save()
            # 对这个商品进行序列化
            serializer = self.get_serializer(cart_obj)
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        else:
            request.data['user'] = user.id
            return super().create(request, *args, **kwargs)

    def list(self, request, *args, **kwargs):
        queryset = self.get_queryset().filter(user=request.user)
        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值