Подтвердить что ты не робот

Параметры захвата в django-rest-framework

предположим, что этот url:

http://localhost:8000/articles/1111/comments/

Я хочу получить все комментарии к данной статье (здесь 1111).

Вот как я захватываю этот URL:

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". С url, заканчивающимся на? Uid = value, я могу использовать self.request.QUERY_PARAMS.get('uid'), но в моем случае я не знаю, как это сделать. Идея?

4b9b3361

Ответ 1

Параметр url хранится в self.kwargs. lookup_field - это поле (по умолчанию pk), общий вид использует внутри ORM при поиске отдельных экземпляров модели, 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