首页 > 其他分享 >django-restful:购物车 学习记录

django-restful:购物车 学习记录

时间:2023-04-22 11:44:53浏览次数:47  
标签:existed goods nums self django user 购物车 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=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 existed

    def update(self, instance, validated_data):
        # 修改商品数量
        # instance 是model 的实例
        instance.nums = validated_data['nums']
        instance.save()
        return instance

 

标签:existed,goods,nums,self,django,user,购物车,restful
From: https://www.cnblogs.com/mengdie1978/p/17342689.html

相关文章

  • Django框架——静态文件配置、form表单、request对象、连接数据库、ORM简介、ORM基本
    配置文件介绍SECRET_KEY='0yge9t5m9&%=of**qk2m9z^7-gp2db)g!*5dzb136ys0#)*%*a'#盐DEBUG=True#调试模式,等项目上线的时候,改成False#配置数据库DATABASES={'default':{'ENGINE':'django.db.backends.sqlite3',#默认是自......
  • 通过django-background-tasks执行定时任务
    1.安装django-background-taskspipinstalldjango-background-tasks2.在Django项目的settings.py文件中添加以app:INSTALLED_APPS=[#otherapps'background_task',]3.创建一个包含需要执行的任务函数:frombackground_taskimportbackgroundimportrando......
  • django使用多个数据库实现
    一、说明:在开发Django项目的时候,很多时候都是使用一个数据库,即settings中只有default数据库,但是有一些项目确实也需要使用多个数据库,这样的项目,在数据库配置和使用的时候,就比较麻烦一点。二、Django使用多个数据库中settings中的DATABASES的设置2.1默认只是用一......
  • jQuery的遍历-prev()和next()方法(购物车数量加减)
    jQuery的遍历-prev()和next()方法<divclass="box"id="box"><ahref='#'class="a"><inputtype="text"class="atxt"value="1"><ahref='#'class="......
  • Django框架——手写web框架、wsgiref模块、动静态网页、jinja2模块、主流web框架、Dja
    web应用'''通过浏览器访问的应用程序!!!'''1.两种模式c/sb/s B/S:browser---------------->server2.web应用程序的有点 2.1只需要一个浏览器即可2.2 节省资源2.3 他们不需要更新,因为所有新的特性都在服务器上执行3.web应用程序的缺点 #特别依赖服务端程序的健壮......
  • django获取当前用户提交到数据库的最新一条记录
    比如想获取最新一条数据的更新时间,datas返回的是一个QuerySet,是一个查询集可能用了filter,当用.last()返回最后一条记录时报错  objectisnotiterable然后用reverse()加上切片获取最后一条数据:reverse按倒序排列deflasttime(self):utime=FollowNote.objects.filte......
  • Django笔记二十六之数据库函数之数学公式函数
    本文首发于公众号:Hunter后端原文链接:Django笔记二十六之数据库函数之数学公式函数这一篇来介绍一下公式函数,主要是数学公式。其中sin,cos这种大多数情况下用不上的就不介绍了,主要介绍下面几种:Abs()绝对值Ceil()向上取整Floor()向下取整Mod()取余Power()乘方Roun......
  • 编写你的第一个 Django 应用程序,第8部分
    本教程从教程7停止的地方开始。我们已经构建了我们的网络投票应用程序,现在将查看第三方软件包。Django的优势之一是丰富的第三方软件包生态系统。它们是社区开发的包,可用于快速改进应用程序的功能集。本教程将展示如何添加Django调试工具栏,一个常用的第三方包。近年来,Djang......
  • Django框架基础4
    一、Django过滤器用法  过滤器从字面的意思上,可以理解为:过滤掉不需要的,剩下我们需要的,Django的模板语言同样也内置了过滤器,如果你了解其他的框架对这个词一定不陌生,比如说Flask框架、Vue框架等,都内置了过滤器这个功能,在本节我们将一起学习Django框架的过滤器。1、过滤器......
  • django
    目录Web应用纯手撸web框架基于wsgiref模块jinja2模块代码封装优化动静态网页前端、后端、数据库三者联动python中得三大主流web框架Django框架如何使用命令行创建和pycharm创建的区别主要文件介绍django小白必会三板斧Web应用#python的就业方向1.web方向---------->就是通过......