gpt4 book ai didi

python - 更新 DRF 中帖子的点赞

转载 作者:行者123 更新时间:2023-12-01 06:42:44 24 4
gpt4 key购买 nike

我正在尝试在 django (DRF) 中编写一个 View ,允许用户在帖子上添加“喜欢”、更新帖子上的“喜欢”状态(喜欢/不喜欢)以及删除帖子上的“喜欢”。帖子 ID 在参数中发送,用户 ID 从身份验证 token 中提取。

我知道如何执行前两个操作,但我不知道如何执行更新。到目前为止,我的看法如下:

class LikeView(generics.CreateAPIView, UpdateModelMixin, DestroyModelMixin):
serializer_class = LikeSerializer
queryset = Like.objects.all()
lookup_field = 'post'
permission_classes = [IsAuthenticated]

def get_object(self):
post = self.request.query_params.get('post')
user = self.request.user.id
return self.get_queryset().filter(post=post, user=user)

# retrieve user ID from token, validate data and save the like on post (working)
def post(self, request, *args, **kwargs):
data = self.get_data(request)
serializer = self.get_serializer(data=data)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response('Like has been saved')

def put(self, request, *args, **kwargs):
data = self.get_data(request)
serializer = self.get_serializer(data=data)
serializer.is_valid(raise_exception=True)
serializer.save()

# working
def delete(self, request, *args, **kwargs):
return self.destroy(request, *args, **kwargs)

# add the data from param and token to a copy of the request body
# to use with the serializers
def get_data(self, request):
data = request.data.copy()
data['post'] = self.request.query_params.get('post')
data['user'] = request.user.id
return data

喜欢的模特:

class Like(models.Model):
user = ForeignKey(User, on_delete=models.CASCADE)
post = ForeignKey(Post, on_delete=models.CASCADE)
state = BooleanField(
default=True, help_text='Like = True, Dislike = False')
created_at = DateTimeField(auto_now_add=True)
updated_at = DateTimeField(auto_now=True)

def __str__(self):
state_int = int(self.state)
return ['Dislike', 'Like'][state_int]

class Meta:
unique_together = ('user', 'post')

我在这里做错了什么? put 处理程序缺少什么?

最佳答案

首先,您不会从此方法返回任何值。

    def put(self, request, *args, **kwargs):
data = self.get_data(request)
serializer = self.get_serializer(data=data)
serializer.is_valid(raise_exception=True)
serializer.save()

尝试添加

        return Response('Like has been updated')

其次,您需要将实例传递给序列化器:

        data = self.get_data(request)
instance = self.get_queryset().get(user_id=request.user.id, post_id=request.data['post_id'])
serializer = self.get_serializer(instance=instance, data=data)

如果不起作用,请报告到底是什么不起作用。

关于python - 更新 DRF 中帖子的点赞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59373572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com