假设这个网址:
http://localhost:8000/articles/1111/comments/
我想获得给定文章的所有评论(这里是1111)。
这就是我捕获这个网址的方式:
url(r'^articles/(?P<uid>[-\w]+)/comments/$', comments_views.CommentList.as_view()),
相关视图如下:
class CommentList(generics.ListAPIView):
serializer_class = CommentSerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
lookup_field = "uid"
def get_queryset(self):
comments = Comment.objects.filter(article= ???)
return comments
有关信息,请参阅相关的序列化程序
class CommentSerializer(serializers.ModelSerializer):
owner = UserSerializer()
class Meta:
model = Comment
fields = ('id', 'content', 'owner', 'created_at')
正如你所看到的,我已经更新了我的get_queryset来过滤关于文章的评论,但我不知道如何捕获“uid”参数。 使用以?uid = value结尾的url,我可以使用self.request.QUERY_PARAMS.get('uid')但在我的情况下我不知道该怎么做。 一个想法?
答案 0 :(得分:54)
url参数存储在self.kwargs
中。 lookup_field
是通用视图在查找单个模型实例时在ORM中使用的字段(默认为pk),lookup_url_kwarg
可能是您想要的属性。
请尝试以下方法:
class CommentList(generics.ListAPIView):
serializer_class = CommentSerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
lookup_url_kwarg = "uid"
def get_queryset(self):
uid = self.kwargs.get(self.lookup_url_kwarg)
comments = Comment.objects.filter(article=uid)
return comments