Django:RetrieveAppView中的HttpResponse提供了一个AttributeError
我正在尝试创建一个API来喜欢一篇文章。这对喜欢一篇文章很有用 但是我在添加returnDjango: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
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)