django+vue+framework第十二天,添加评分

这篇博客记录了作者使用Django和Vue进行项目开发时,如何添加用户评分功能的过程。作者参考了某大佬的教程,详细描述了从在Django的models中创建UserSource模型,到序列化、ViewSet、URL配置,再到Vue前端的修改,包括source.vue的创建、member-menu.vue的更新,以及商品详情页productDetail.vue的评分按钮添加。最后,还提到了如何处理不同评分的传递和界面相应修改。
摘要由CSDN通过智能技术生成

新人学习django 是按照这个大佬的教程学习的
链接: https://www.cnblogs.com/derek1184405959/p/8733194.html.

很多步骤都是按照上面的教程学习的,这里只是记录一下自己学习的过程和一些错误
如果有人想要系统的学习,建议去上面那位大佬处学习

先在pycharm中的user_operations中的models中新建一个UserSource的model

class UserSource(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="用户")
    goods = models.ForeignKey(Goods, on_delete=models.CASCADE, verbose_name="商品", help_text="商品id")
    rating=models.IntegerField(verbose_name="用户对商品的评分",default=0)
    timestamp=models.DateTimeField("添加时间",default=datetime.now())

    class Meta:
        verbose_name="用户评分"
        verbose_name_plural=verbose_name
    def __str__(self):
        return self.user.username

然后是序列化serializer

class  UserSourceSerilaizer(serializers.ModelSerializer):
    #获取当前用户
    user=serializers.HiddenField(
        default=serializers.CurrentUserDefault()
    )

    class Meta:
        # validate实现唯一联合,一个商品只能评分一次
        validators = [
            UniqueTogetherValidator(
                queryset=UserSource.objects.all(),
                fields=('user', 'goods'),
                # message的信息可以自定义
                message="大大,已经评分了哦"
            )
        ]
        model = UserSource
        # 评分的时候需要返回商品的id,因为取消评分的时候必须知道商品的id是多少
        fields = ("user", "goods", 'id',"rating")


class UserSourceDetailSerilaizer(serializers.ModelSerializer):
    """
    用户评分详情
    """
    #通过用户id获取评分的商品,需要嵌套商品的序列化
    goods=GoodsSerializer()
    class Meta:
        model=UserSource
        fields=("goods","id","rating","user")

新建viewSet

class UserSourceViewSet(viewsets.GenericViewSet,mixins.ListModelMixin,mixins.CreateModelMixin,mixins.DestroyModelMixin):
    """
    用户评分
    """
    serializer_class = UserSourceDetailSerilaizer
    #permission是用来做权限判断的
    ## IsAuthenticated:必须登录用户;IsOwnerOrReadOnly:必须是当前登录的用户可以查看
    permission_classes = (IsAuthenticated,IsOwnerOrReadOnly)
    #auth做用户认证
    authentication_classes = (JSONWebTokenAuthentication,SessionAuthentication)
    #搜索的字段
    lookup_field = "goods_id"


    #动态选择序列化方式
    def get_serializer_class(self):
        if self.action=="list":
            return UserSourceDetailSerilaizer
        elif self.action=="create":
            return UserSourceSerilaizer

        return  UserSourceDetailSerilaizer
    def get_queryset(self):
        #只能查看当前登录用户的评分,不会获取所有用户的评分
        return UserSource.objects.filter(user=self.request.user)

创建url

# 配置用户评分的url
router.register(r'source', UserSourceViewSet, basename="source")
</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值