博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Vue + Django 2.0.6 学习笔记 10.1 加入购物车功能的实现
阅读量:4127 次
发布时间:2019-05-25

本文共 3003 字,大约阅读时间需要 10 分钟。

1. models.py的修改

class ShoppingCart(models.Model):    """    购物车    """    user = models.ForeignKey(User, verbose_name=u'用户', on_delete=models.CASCADE)    goods = models.ForeignKey(Goods, verbose_name=u'商品', on_delete=models.CASCADE)    nums = models.IntegerField(default=0, verbose_name=u'购买数量')    add_time = models.DateTimeField(default=datetime.now, verbose_name=u'添加时间')    class Meta:        verbose_name = u'购物车'        verbose_name_plural = verbose_name# 建立联合唯一        unique_together = ('user', 'goods')    def __str__(self):        return "%s(%d)".format(self.goods.name, self.nums)

serializers.py

from rest_framework import serializersfrom goods.models import Goodsfrom .models import ShoppingCart# 用Serializer而不是ModelSerializer的原因;# 1.更灵活2.因为我们建立了联合唯一。所以如果使用ModelSerializer的话会去校验是否唯一#          但是购物车有这么一个情况,就是在点击添加购物车的按钮时,会判断购物车是否有#          ,如果有。不是抛异常,而是nums字段加1  所以如果用ModelSerializer的话会#          抛异常,所以这里需要自定义。class ShopCartSerializer(serializers.Serializer):    user = serializers.HiddenField(        default=serializers.CurrentUserDefault()    )    nums = serializers.IntegerField(required=True, min_value=1,label="数量",                                    error_messages={                                        "min_value":"商品数量不能小于1",                                        "required": '请选择购买数量'                                    })# goods是外键 所以需要用到PrimaryKeyRelatedField。并且指定外键的model类    goods = serializers.PrimaryKeyRelatedField(required=True, queryset=Goods.objects.all())# 重写create函数,已满足我们的功能需求    def create(self, validated_data):# user对象是保存在self.context["中"]# validated_data中的数据类型已经做好转换了        user = self.context["request"].user        nums = validated_data['nums']        goods = validated_data['goods']# 是否存在,是就nums加数量 否就创建记录        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

views.py

from rest_framework import viewsetsfrom rest_framework.permissions import IsAuthenticatedfrom utils.permissions import IsOwnerOrReadOnlyfrom rest_framework_jwt.authentication import JSONWebTokenAuthenticationfrom rest_framework.authentication import SessionAuthenticationfrom .serializers import ShopCartSerializerfrom .models import ShoppingCart# Create your views here.class ShoppingCartViewset(viewsets.ModelViewSet):    """    购物车功能    list:        获取购物车详情    create:        加入购物车    delete:        删除购物车记录    """    permission_classes = (IsAuthenticated, IsOwnerOrReadOnly)    authentication_classes = (JSONWebTokenAuthentication, SessionAuthentication)    serializer_class = ShopCartSerializer    def get_queryset(self):        return ShoppingCart.objects.filter(user=self.request.user)

urls.py

from trade.views import ShoppingCartViewset#购物车router.register('shopcarts', ShoppingCartViewset, base_name='shopcarts')

关于PrimaryKeyRelatedField的官方文档

s

完结

转载地址:http://dsepi.baihongyu.com/

你可能感兴趣的文章
FCKeditor使用说明
查看>>
在outlook2007中配置126邮箱
查看>>
jQuery Form Plugin
查看>>
优秀员工的十个工作习惯
查看>>
由一篇作文《一件有意义的事》展开的
查看>>
深入理解C#的中static
查看>>
清除windows记住的网络用户名和密码
查看>>
asus安装Windows操作系统
查看>>
安装SQL Server 2005之后找不到SQL Server Management Studio Express
查看>>
使用VS和IE调试Json
查看>>
Microsoft Office Word 2007 切换窗口后鼠标无法使用问题的解决办法
查看>>
SQL 删除表
查看>>
PowerDesigner结合SQL Server2005进行数据库设计
查看>>
基于角色的权限访问控制数据库设计
查看>>
char、varchar、nchar、nvarchar的区别
查看>>
SQL Server 存储层级数据实现无限级分类
查看>>
在SQL中递归查询数据
查看>>
如何在三个月内获得三年的工作经验
查看>>
windows xp系统iis无法被局域网其他用户访问的解决方法
查看>>
在xp IIS上搭建动易论坛注意事项
查看>>