![](/img/trans.png)
[英]How can I get a comment that corresponds to a post in django rest framework?
[英]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.