【问题标题】:Capture parameters in django-rest-framework在 django-rest-framework 中捕获参数
【发布时间】:2014-02-13 02:01:42
【问题描述】:

假设这个网址:

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

我想获取给定文章的所有 cmets(此处为 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 以过滤文章中的 cmets,但我不知道如何捕获“uid”参数。 以 ?uid=value 结尾的 url,我可以使用 self.request.QUERY_PARAMS.get('uid') 但在我的情况下,我不知道该怎么做。 有什么想法吗?

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    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
    

    【讨论】:

    • 谢谢!!我尝试构建自定义 mixins(django-rest-framework.org/api-guide/…)但未成功,但您的解决方案工作正常。 :)
    • 您可能想探索这个库,它采用query params 并以优雅的方式在queryset 上放置过滤器。 github.com/manjitkumar/drf-url-filters
    • 嘿@Scott Woodall,我遇到了类似的问题,现在我解决了。我现在关心的是,这lookup_url_kwarg 是必须的吗?如果我有多个参数怎么办?例如uidsome_thing_else?这样做可以comments = Comment.objects.filter(article=self.kwargs.get('uid'))吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 2018-05-30
    • 2020-04-12
    • 1970-01-01
    相关资源
    最近更新 更多