django rest框架json序列化器

Muh*_*cha 5 django serialization json django-rest-framework

我想从Django休息框架得到json响应,所以我有这样的Json Response :.

[
    {
        "id": 1,
        "TitleEnglish": "Tiny Talents Program",
        "TitleArabic": "Tiny Talents Program",
        "DescriptionEnglish": "Timing: 8:00 am till 1:00 pm",
        "DescriptionArabic": "Timing: 8:00 am till 1:00 pm",
        "CategoryEnglish": "Art & Education ",
        "CategoryArabic": "Art & Education ",
        "Date": "2015-05-07",
        "Status": true,
        "Image": "--"
    }
]
Run Code Online (Sandbox Code Playgroud)

但我需要这样的回应:

{
"data": [
    {
        "id": 1,
        "TitleEnglish": "Tiny Talents Program",
        "TitleArabic": "Tiny Talents Program",
        "DescriptionEnglish": "Timing: 8:00 am till 1:00 pm",
        "DescriptionArabic": "Timing: 8:00 am till 1:00 pm",
        "CategoryEnglish": "Art & Education ",
        "CategoryArabic": "Art & Education ",
        "Date": "2015-05-07",
        "Status": true,
        "Image": "--"
    }
       ]
}
Run Code Online (Sandbox Code Playgroud)

我的序列化代码是:

class PromotionSerializer(serializers.HyperlinkedModelSerializer):
    CategoryEnglish  = serializers.CharField(read_only=True, source="Category.TitleEnglish")
    CategoryArabic  = serializers.CharField(read_only=True, source="Category.TitleArabic")
    class Meta:
        model = Promotion
        fields = ('id', 'TitleEnglish', 'TitleArabic', 'DescriptionEnglish', 'DescriptionArabic', 'CategoryEnglish','CategoryArabic', 'Date','Status','Image')
Run Code Online (Sandbox Code Playgroud)

Muh*_*cha 5

我通过更改视图解决了我的问题:

我添加了一个列表方法,我的问题解决了:

def list(self, request):
    queryset = Promotion.objects.all()
    serializer_class = PromotionSerializer(queryset, many=True)
    serialized_data =  {'data': serializer_class.data}
    return Response(serialized_data)
Run Code Online (Sandbox Code Playgroud)


小智 2

最简单的解决方案是重写 to_representation 方法

def to_representation(self, instance):
    data = super(PromotionSerializer, self).to_representation(instance)
    return {'data': data }
Run Code Online (Sandbox Code Playgroud)