簡體   English   中英

如何刪除 django-rest 中的帖子評論?

[英]How I can delete a comment of post in django-rest?

我是 Django 和 Django-rest 的新手。 我使用 django 編寫了一個博客應用程序。 我想刪除評論所有者和帖子所有者的評論。提前感謝這是我的評論並發布 model:

class Post(models.Model):
    name = models.CharField(blank=True, max_length=60)
    caption = models.CharField(blank=True, max_length=280)
    status = models.CharField(blank=True, max_length=20)
    owner = models.ForeignKey(User, related_name='Post_owner', null=True, on_delete=models.CASCADE)
    created_at = models.TimeField(auto_now_add=True)
    multimedia = models.ManyToManyField(Media, related_name='Post', blank=True)

class Comment(models.Model):
    context = models.CharField(blank=True, max_length=280) 
    author = models.ForeignKey(User, related_name='comment_author', null=True, on_delete=models.CASCADE)
    created_at = models.TimeField(auto_now_add=True)
    post = models.ForeignKey(Post, related_name='comments', null=True, on_delete=models.CASCADE)

這是我的序列化器

class CommentSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Comment
        fields = ('id','context', 'author','created_at', 'post')

class PostSerializer(serializers.ModelSerializer):
    multimedia = PostMediaSerializer(many=True, read_only=True, required=False)
    comments = CommentSerializer(many=True, read_only=True)
    class Meta:
        model = models.Post
        fields = ('name', 'caption', 'status', 'owner', 'created_at', 'multimedia','comments')

這是我的觀點 class 插入評論:

class CreateCommentView(generics.RetrieveUpdateDestroyAPIView):

    queryset = Comment.objects.all()
    permission_classes = (IsAuthenticated,)
    serializer_class = post_serializer.CommentSerializer
    def put(self, request, pk=None):
        user = request.user
        data = request.data
        data['author'] = user.email
        data['post'] = pk
        serializer = self.get_serializer(data=data)
        if not serializer.is_valid(True):
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
        serializer.save()
        return Response("comment created!", status=status.HTTP_202_ACCEPTED)

您可以簡單地創建自己的權限來實現這一目標。

如果您還沒有完成,請創建一個permissions.py文件並添加以下內容:

#permissions.py

from rest_framework import permissions

class IsPostOrCommentOwner(permissions.BasePermission):

    def has_object_permission(self, request, view, obj):
        if request.method == "DELETE": 
            # check here if the user is owner of the post or comment
            return obj.author == request.user or obj.post.owner == request.user

        # else always return True.
        return True

然后,您可以將新創建的權限添加到您的視圖中。

# views.py

from .permissions.py import IsPostOrCommentOwner

class CreateCommentView(generics.RetrieveUpdateDestroyAPIView):

    queryset = Comment.objects.all()
    permission_classes = (IsAuthenticated, IsPostOrCommentOwner,)
    # etc ...

之后,只有帖子所有者或評論作者才能刪除評論。 您可以在此處找到有關 DRF 權限系統的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM