zoukankan      html  css  js  c++  java
  • DRF实现购物车逻辑

    一、序列化

    from goods.models import Goods
    from .models import ShoppingCart
    from rest_framework import serializers
    from goods.serializers import GoodsSerializer
    
    
    class ShoppingCartDetaiSerializer(serializers.ModelSerializer):
        """
        购物车详情
        """
        goods = GoodsSerializer(read_only=True)
    
        class Meta:
            model = ShoppingCart
            fields = ['goods', 'nums']
    
    
    class ShoppingCartSerializer(serializers.Serializer):
        """
        购物车
        """
        user = serializers.HiddenField(default=serializers.CurrentUserDefault())
        nums = serializers.IntegerField(required=True, label='数量', min_value=1,
                                        error_messages={
                                            'min_value': '商品数量不能小于一',
                                            'required': '请选择购买数量'
                                        })
        goods = serializers.PrimaryKeyRelatedField(required=True, queryset=Goods.objects.all())
    
        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 existed
    
        def update(self, instance, validated_data):
            instance.nums = validated_data['nums']
            instance.save()
            return instance

    二、views.py

    from rest_framework import viewsets, mixins
    from rest_framework.permissions import IsAuthenticated
    from utils.permissions import IsOwnerOrReadOnly
    from rest_framework.authentication import SessionAuthentication
    from rest_framework_jwt.authentication import JSONWebTokenAuthentication
    from .serializers import ShoppingCartSerializer, ShoppingCartDetaiSerializer
    from .models import ShoppingCart
    
    
    class ShoppingCartViewSet(viewsets.ModelViewSet):
        """
        list:
           购物车列表
        read:
           购物车详情
        create:
           增加购物车
        update:
           更改购物车
        partial_update:
           部分更改
        delete:
           删除购物车
        """
        permission_classes = [IsAuthenticated, IsOwnerOrReadOnly]
        authentication_classes = [JSONWebTokenAuthentication, SessionAuthentication]
        lookup_field = 'goods_id'
    
        def get_queryset(self):
            return ShoppingCart.objects.filter(user=self.request.user)
    
        def get_serializer_class(self):
            if self.action == 'list':
                return ShoppingCartDetaiSerializer
            else:
                return ShoppingCartSerializer
  • 相关阅读:
    expect 批量自动部署ssh 免密登陆 之 二
    expect 批量自动部署ssh 免密登陆
    Haproxy_haproxy.cfg
    gitlab 权限说明
    Docker限制容器日志大小
    Docker 常用指令
    CentOS下安装Docker
    Vue项目创建build后可修改的配置文件(接口地址配置)
    SpringBoot+Mybatis-plus多数据源配置(MySQL、Sqlserver)
    JQuery序列化表单排除空值的问题
  • 原文地址:https://www.cnblogs.com/mxsf/p/10687933.html
Copyright © 2011-2022 走看看