首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >防止用户在Django API中喜欢自己的评论

防止用户在Django API中喜欢自己的评论
EN

Stack Overflow用户
提问于 2021-02-23 17:57:44
回答 3查看 91关注 0票数 0

我希望有人能帮助解决这个问题。我相信答案可能很简单,但我就是摸不着头脑。我正在创建一个消息传递API,用户喜欢评论,但是我想防止用户喜欢自己的评论

我有以下链接到消息模型的Like模型:

# models.py

class Like(models.Model):
    message_id = models.ForeignKey(Message, related_name='message_id_like', on_delete=models.CASCADE)
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    like = models.BooleanField()
    like_date = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return str(self.owner) + ', ' + self.message_id.message_title[:40]

使用API的序列化程序

# serializers.py

class LikeSerializer(serializers.ModelSerializer):
    owner = serializers.ReadOnlyField(source='owner.username')
    class Meta:
        model = Like
        fields = [
            'message_id',
            'owner',
            'like',
            'like_date',
            ]

和一个视图:

# views.py

class LikeViewSet(viewsets.ModelViewSet): 
    queryset = Like.objects.all()
    serializer_class = LikeSerializer

    def perform_create(self, serializer): # Saving the user
        serializer.save(owner=self.request.user)

我认为我需要在LikeViewSet类中添加一个函数,以防止在like user匹配消息user时创建Like,然而,我不知道如何指定它。

感谢您的帮助。

EN

Stack Overflow用户

回答已采纳

发布于 2021-02-25 15:56:43

最终使用提交的答案的变体解决了这个问题。避免序列化程序访问错误的秘诀是初始_数据方法(而不是已验证的_拉回错误数据的数据方法)。

def perform_create(self, serializer): 
    message = get_object_or_404(Message, pk=serializer.initial_data['message_id'])
    if message.owner == self.request.user:
        raise PermissionDenied
    else:
        serializer.save(owner=self.request.user)
票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66330893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档