使用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()
答案 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',
)