业务场景
我们有一张职位表,和一个用户表。职位表和用户之间的关系是多对多。所以在职位表的模型类我们采用的是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)的形式删除中间表的数据。
浙公网安备 33010602011771号