【问题标题】:Customizing Serializers in Django Rest Framework在 Django Rest Framework 中自定义序列化程序
【发布时间】:2017-05-12 19:35:41
【问题描述】:

当我希望在收到 JSON 响应时对其进行组织而不是接收和组织时,我正在创建一个应用程序。

目前,我有一个 ListSerializer 类型的序列化程序,它会给我类似的响应

[
  {
    "Title": "ABCD",
    "Content": "Article Stuff",
    "Category": "News"
  },
  {
    "Title": "EFGH",
    "Content": "Article Stuff",
    "Category": "Jokes"
  },
  {
    "Title": "QWER",
    "Content": "Article Stuff",
    "Category": "News"
  },

]

我希望它是这样的:-

{
  "News": [
    {
      "Title": "ABCD",
      "Content": "Article Stuff",
      "Category": "News"
    },
    {
      "Title": "QWER",
      "Content": "Article Stuff",
      "Category": "News"
    }
  ],
  "Jokes": [
    {
      "Title": "EFGH",
      "Content": "Article Stuff",
      "Category": "Jokes"
    }
  ]
}

到目前为止,我只是使用了默认的模型序列化程序。我知道如果我自己从 SQL 结果集中创建 JSON,我将如何做到这一点,但如果我能编写一个可以做到这一点的序列化程序会更好。 此外,我还计划在此之后对每个类别进行一些分页。但这应该不是什么大问题,我猜只需要检查我们从数据库中提取特定类别文章的数据的位置。

【问题讨论】:

  • 你能展示你的代码吗?
  • 好吧,我的代码并不多。这些是具有类别模型和文章模型的唯一默认视图集。

标签: json django serialization django-rest-framework


【解决方案1】:

覆盖序列化程序的.to_representation() 方法。

由于没有太多关于 ModelClass 对象和关系的信息,下面的示例可能会对您有所帮助:

class ArticleSerializer(serializers.ModelSerializer):

   def to_representation(self, instance):
       response_dict = dict()
       response_dict[instance.section_id] = {
           'News': ArticleSerializer(Article.objects.filter(category="News"), many=True).data,
           'Jokes': ArticleSerializer(Article.objects.filter(category="Jokes"), many=True).data
       }
       return response_dict

【讨论】:

    猜你喜欢
    • 2016-11-28
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 2020-08-04
    相关资源
    最近更新 更多