2017-09-13 33 views
0

使用Django的REST框架我想改變串行響應由下式給出字段名更改字段的順序在正常串行響應

從DRF

輸出列表動態字段順序如下,

{」項目「:[{」name「:」John「,」age「:25,」id「:3},{」name「:」Sam「,」age「:20,」id「:8}]}

我的申請順序列表是:order_list = [ '身份證', '年齡', '名']

我要的是:

{「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

@SachinKukreja我已經更新了序列化器,我想這樣做不需要觸摸串行器中的提交聲明 – shaan

回答

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) 
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', 
     )