Django:RetrieveAppView中的HttpResponse提供了一个AttributeError

Django:RetrieveAppView中的HttpResponse提供了一个AttributeError,django,rest,django-rest-framework,httpresponse,Django,Rest,Django Rest Framework,Httpresponse,我正在尝试创建一个API来喜欢一篇文章。这对喜欢一篇文章很有用 但是我在添加returnHttpResponse/Response语句时出错: AttributeError at /api/posts/like/4/ 'HttpResponse' object has no attribute 'model' Request Method: GET Request URL: http://127.0.0.1:8000/api/posts/like/4/ Django Version: 2.0.7

我正在尝试创建一个API来喜欢一篇文章。这对喜欢一篇文章很有用 但是我在添加return
HttpResponse/Response
语句时出错:

AttributeError at /api/posts/like/4/
'HttpResponse' object has no attribute 'model'
Request Method: GET
Request URL: http://127.0.0.1:8000/api/posts/like/4/
Django Version: 2.0.7
views.py url.py 有我可以参考的链接吗

来自官方

get\u queryset(self)
方法返回应用于列表视图的
queryset
,并且 应作为详细视图中查找的基础。默认值 返回由
queryset
属性指定的queryset

从您的评论中,我了解到,在访问API(详细视图)时,您需要显示一些响应

由于您使用的是
retrieveapieview
类,因此必须重写
retrieve()
方法,如下所示:

from rest_framework.generics import RetrieveAPIView


class LikeDetailAPIView(RetrieveAPIView):
    serializer_class = PostSerializer

    def get_queryset(self):
        return Like.objects.filter(post=self.kwargs['pk'], user=self.request.user)

    def retrieve(self, request, *args, **kwargs):
        if self.get_queryset().exists():
            self.get_queryset().delete()
            content = {'message': 'unliked'}
            return Response(content, status=status.HTTP_202_ACCEPTED)
        like = Like(post=Post.objects.get(id=post_id), user=user)
        like.save()
        content = {'message': 'like'}
        return Response(content, status=status.HTTP_202_ACCEPTED)


现在,您可以通过HTTP-GET方法访问端点,
/api/posts/like/4/
您的
GET\u queryset
返回一个
响应
?此外,您的GET请求似乎会引入副作用,这与GET请求应该执行的操作的原则背道而驰。只需返回消息,不一定是响应,只是尝试获取消息。但是
GET\u queryset
应该——正如名称所示——返回
queryset
,您可以覆盖
.GET
.post
,等等。此外,无论如何,您都不应该在GET请求中执行具有副作用的操作。从
GET
更改为
POST
,重新编写函数,使用
def POST
,现在可以工作了,谢谢
url(r'^like/(?P<pk>.+)/$',LikeDetailAPIView.as_view(), name='likeapi'),
class LikeListSerializer(serializers.ModelSerializer):
    class Meta:
       model = Like
       fields = [
            'user',
            'post',
            'time',
       ]
from rest_framework.generics import RetrieveAPIView


class LikeDetailAPIView(RetrieveAPIView):
    serializer_class = PostSerializer

    def get_queryset(self):
        return Like.objects.filter(post=self.kwargs['pk'], user=self.request.user)

    def retrieve(self, request, *args, **kwargs):
        if self.get_queryset().exists():
            self.get_queryset().delete()
            content = {'message': 'unliked'}
            return Response(content, status=status.HTTP_202_ACCEPTED)
        like = Like(post=Post.objects.get(id=post_id), user=user)
        like.save()
        content = {'message': 'like'}
        return Response(content, status=status.HTTP_202_ACCEPTED)