在Django Rest Framework中自定义序列化程序

时间:2017-05-12 19:35:42

标签: json django serialization django-rest-framework

当我希望收到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,我将如何做到这一点,但如果我能编写一个可以执行此操作的序列化程序,那会更好。 此外,我计划在此之后对每个类别进行一些分页。但这应该不是一个大问题,我猜想只需要将检查从数据库中提取到特定类别的文章。

1 个答案:

答案 0 :(得分:0)

覆盖序列化程序的.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