Django + rest-framework:序列化任意查询

时间:2014-03-12 11:56:58

标签: json django rest django-rest-framework

我有三个代表模型中不同部分的类:SectionASectionBSectionC。 这些部分中的每一部分都关联了一组项目(我的模型中的类Item)。

我想得到一个类似于此的json:

{
"sectionA": [
        {
            "id": 1, 
            "picture": "car_pic1", 
            "category": "cat1"
        }, 
        {
            "id": 3, 
            "picture": "car_pic1", 
            "category": "cat2"
        }, 
        {
            "id": 5, 
            "picture": "car_pic1", 
            "category": "cat3"
        }
],
"sectionB": [
        {
            "id": 2, 
            "picture": "car_pic1", 
            "category": "cat8"
        }, 
        {
            "id": 4, 
            "picture": "car_pic1", 
            "category": "cat9"
        }, 
        {
            "id": 7, 
            "picture": "car_pic1", 
            "category": "cat10"
        }, 
],
 "sectionC": [
            {
                "id": 9, 
                "picture": "car_pic1", 
                "category": "cat9"
            }, 
            {
                "id": 10, 
                "picture": "car_pic1", 
                "category": "cat9"
            }, 
            {
                "id": 11, 
                "picture": "car_pic1", 
                "category": "cat10"
            }, 
]
}

此json显示与每个部分相关的任何三个项目。

我想知道如何使用rest-framework实现这一点。基本上我需要执行一个查询检索每个部分的三个项目(因为这个json没有关联到模型对象)并将所有这些序列化为json。我不确定在何处或如何执行这些查询,到目前为止我没有取得任何成功。

1 个答案:

答案 0 :(得分:3)

最后我做的略有不同。我的视图只是为每个部分及其相关项创建一个字典:

class SectionList(APIView):
    """
    List three objects for each section.
    """
    def generate_data(self):
        #query to get the items of each section

        list_items = []
        list_items.append({"section" : "sectionA", "items" : secA_items})
        list_items.append({"section" : "sectionB", "items" : secB_items})
        list_items.append({"section" : "sectionC", "items" : secC_items})

        return list_items;

    def get(self, request, format=None):
        section_list = self.generate_data()
        serializer = SectionSerializer(section_list)
        return Response(serializer.data)

这是我使用的序列化器:

class SectionSerializer(serializers.Serializer):
    section = serializers.CharField(max_length=200)
    items = ItemSerializer(many=True)