美文网首页Python_Django
[Django] 动态序列化方法字段

[Django] 动态序列化方法字段

作者: alue | 来源:发表于2022-03-06 00:01 被阅读0次

    需求:使用Django REST framework序列化文章模型,同时根据request参数,返回高亮的查询结果。

    可以用SerializerMethodField来实现这个需求。

    class ArticleSerializer(serializers.ModelSerializer):
        class Meta:
            model = models.Article
            fields = "__all__"
    
        highlight = serializers.SerializerMethodField()
    
        def get_highlight(self, obj: models.Article):
            """
            问题的关键在于,怎么在这里获得用户请求参数
            """
            # 可以利用 context 获得查询参数
            query = self.context['query']
            return highlight(self.text,query)
    
    

    因为get_highlight方法参数里并没有用户请求,我们需要借助上下文参数 context 来传递查询参数。如何设置 context 呢? 可以在 ViewSet中,利用 get_serializer_context方法实现 context 的扩充。示例如下:

    class ArticleViewSet(viewsets.ModelViewSet):
        serializer_class = serializers.ArticleSerializer
    
        def get_serializer_context(self) -> dict[str, Any]:
            context: dict[str, Any] = super().get_serializer_context()
            query = self.request.GET.get('q', None)
            context["query"] = query
            return context
        ...
    

    短短几行代码,就能够实现文章的增删改查和结果高亮显示的后端逻辑。

    相关文章

      网友评论

        本文标题:[Django] 动态序列化方法字段

        本文链接:https://www.haomeiwen.com/subject/sgrirrtx.html