飞行的猪哼哼

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

业务场景

我们有一张职位表,和一个用户表。职位表和用户之间的关系是多对多。所以在职位表的模型类我们采用的是ManyToMany类型,现在我们业务需要用户点击浏览职位的时候,点击收藏。需要在中间表中记录这职位与用户之间的关系,但是不要创建职位。

模型类如图:

在这里插入图片描述

视图定义:

# 收藏职位----反序列化更新
class CollecteRecruitView(ModelViewSet):
    queryset = Recruit.objects.all()
    serializer_class = RecruitSerializers
    lookup_field = "id"

    def update(self, request, *args, **kwargs):
        # 1: 获取user对象
        user = request.user
        # 2: 获取recruit对象
        id = self.kwargs.get("id")
        recruit = Recruit.objects.get(pk=id)

        # 3: 得到所有的user对象
        users = recruit.users.all()

        if user in users:
            recruit.users.remove(user)
            return Response(data={"message": "收藏成功", "success": True})
        else:
            recruit.users.add(user)
            return Response(data={"message": "成功取消收藏", "success": True})

思路:
1:分别获取两个对象: user和recruit 对象
2: 使用 对象A.中间表.all()的形式获取关联A对象的所有的B对象。
3: 使用 对象A.中间表.add(对象B)的形式向中间表中增加数据。
4: 使用 对象B.中间表.remove(对象B)的形式删除中间表的数据。

posted on 2020-10-14 14:44  飞行的猪哼哼  阅读(119)  评论(0)    收藏  举报