【问题标题】:How can i access QueryString values in Serializer Django Rest Framework如何在 Serializer Django Rest Framework 中访问 QueryString 值
【发布时间】:2014-05-25 06:19:16
【问题描述】:

我正在尝试访问序列化程序类中的查询字符串值。

class OneZeroSerializer(rest_serializer.ModelSerializer):

    location = rest_serializer.SerializerMethodField('get_alternate_name')

    def get_alternate_name(self, obj):
        view = self.context['view']
        print view.kwargs['q']  #output is {}
        return 'foo'


    class Meta:
        model = OneZero

        fields = ('id', 'location')

观看次数

class OneZeroViewSet(viewsets.ModelViewSet):

   serializer_class = OneZeroSerializer

   queryset = OneZero.objects.all()

这是访问查询字符串的正确方法吗?

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    根据你要使用的docsself.request.QUERY_PARAMS

    你可以看到它正在使用here

    更新:

    从 DRF 3.0 开始:

    request.QUERY_PARAMS 的使用现在正在等待弃用,以支持 小写的 request.query_params

    【讨论】:

    • 这是我打印此命令“OneZeroSerializer”对象没有属性“请求”时的错误。我认为这可以在视图集中使用,而不是用于序列化程序类
    • 啊,是的,误读了正在发生的事情。序列化程序与请求无关,如果您愿意,可以单独使用它们。这意味着他们没有 GET 和 POST 数据的概念。您需要修改视图以将查询参数发送到序列化程序。
    【解决方案2】:

    使用 ViewSets 时,您可以在序列化程序上下文中访问请求(就像访问视图一样)。您可以从此访问查询参数

    def get_alternate_name(self, obj):
        request = self.context['request']
        print request.query_params['q']
        return 'foo'
    

    属性 view.kwargs 包含从您的 url-config 解析的命名参数,因此来自路径部分。

    【讨论】:

    • 对于较新的版本:request.QUERY_PARAMS 自 3.0 版起已被弃用,取而代之的是 request.query_params,自 3.2 版起已完全删除。
    • 我建议使用request.query_params.get('q') 这样它就不会引发异常。
    【解决方案3】:

    self.context['request'].query_params

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-05
      • 2018-10-05
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多