我正在尝试创建喜欢帖子的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
class LikeDetailAPIView(RetrieveAPIView):
serializer_class = PostSerializer
def get_queryset(self):
user = self.request.user
post_id = self.kwargs['pk']
like = Like(post=Post.objects.get(id=post_id), user=user)
user_like = Like.objects.filter(post=post_id, user=user)
if user_like.exists():
user_like.delete()
content = {'message': 'unliked'}
return Response(content, status=status.HTTP_202_ACCEPTED)
else:
like.save()
content = {'message': 'like'}
return Response(content, status=status.HTTP_202_ACCEPTED)
url(r'^like/(?P<pk>.+)/$',LikeDetailAPIView.as_view(), name='likeapi'),
我打算做的是返回一条成功消息。
class LikeListSerializer(serializers.ModelSerializer):
class Meta:
model = Like
fields = [
'user',
'post',
'time',
]
我可以参考任何链接吗?
答案 0 :(得分:1)
来自官方DRF doc,
get_queryset(self)
方法返回应用于列表视图的queryset
,并且 应该用作detail views
中查找的基础。默认值 返回由queryset
属性指定的查询集。
根据您的评论,我了解到,访问API(详细视图)时需要显示一些响应。
由于您使用的是 RetrieveAPIView
类,因此必须覆盖 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/