Django返回自定义json并添加需要处理的值

时间:2015-01-22 09:15:23

标签: json django django-serializer

我得到一个json结果,而images部分与id不匹配 像:

{
    "id": 11 
    "title":"AAA"
    "createday":"2015-01-01"    
    "images": [
        "B_123.jpg"
    ],    
}, 
{
    "id": 12 
    "title":"BBB"
    "createday":"2015-01-01"    
    "images": [
        "A_123.jpg"
    ],    
}, 

但实际上,id = 11应与图片A_123.jpg匹配,而id = 12应与图片B_123.jpg匹配

因为images需要在功能上做某事,所以它们不能很好地匹配。

如何让它与正确的订单匹配?

这是我的代码:

views.py

item_list = CombineQueryset(queryset1, queryset2)
return Response(item_list.jsonlize(request))

serializes.py

class CombineQueryset(serializers.ModelSerializer):
    def __init__(self, query1, query2, *args, **kwargs):
        def get_images(dictionary, obj):
            images = []
            for image in obj.image_set.all():
                images.append(image.path)
            dictionary["images"] = images
            return dictionary

        query_list1 = query1.values(
            'title',
            'createday',
            'id',
        )
        .....   
        query_list1 = map(get_images, query_list1, query1)
        self.query_list = query_list1 + query_list2

1 个答案:

答案 0 :(得分:0)

我认为这必定是由于代码中没有显示的内容,例如query_list1query1id=12query2中的不同顺序以及代码query_list2不是query_list1代码的精确剪切和粘贴。

试试这个:

class CombineQueryset(serializers.ModelSerializer):
    def __init__(self, query1, query2, *args, **kwargs):
        def querylist(queryset):
            return [
                {
                    'title': obj.title,
                    'createday': obj.createday,
                    'id': obj.id,
                    'images': obj.image_set.values_list('path', flat=True),
                }
                for obj in queryset
            ]

        self.query_list = querylist(query1) + querylist(query2)