更改正常序列化程序响应中的字段顺序

时间:2017-09-13 16:39:56

标签: django django-rest-framework

使用Django REST框架我想通过给定字段名称列表动态更改序列化程序响应字段顺序。

DRF的输出如下:

{
  "items": [
    {
      "name": "John",
      "age": 25,
      "id": 3
    },
    {
      "name": "Sam",
      "age": 20,
      "id": 8
    }
  ]
}

我提交的订单清单是:

order_list = ['id', 'age', 'name']

我想要的是:

{
  "items": [
    {
      "id": 3,
      "age": 25,
      "name": "John"
    },
    {
      "id": 8,
      "age": 20,
      "name": "Sam"
    }
  ]
}

串行器代码:

class ItemSerializer(serializers.Serializer):
    name = serializers.CharField()
    id = serializers.IntegerField()
    age = serializers.IntegerField()    

2 个答案:

答案 0 :(得分:0)

您可以循环播放序列化数据并使用OrderedDict对字段进行排序。 序列化程序中的数据已经使用OrderedDict,但我们可以使用它来进一步订购。

from collections import OrderedDict

data = serializer.data
ordered_data = []
for item in data:
     item_dict = OrderedDict()
     item_dict['id'] = item['id']
     item_dict['age'] = item['age']
     item_dict['name'] = item['name']
     ordered_data.append(item_dict)

答案 1 :(得分:0)

要更改排序,您需要更改序列化程序元类中的字段定义。

class ItemSerializer(serializers.Serializer):
    name = serializers.CharField()
    id = serializers.IntegerField()
    age = serializers.IntegerField()

    class Meta(object):
         fields = ( # this needs to be ordered properly
             'id',
             'age',
             'name',
         )