Javascript Django Rest框架按顺序返回序列化数据

Javascript Django Rest框架按顺序返回序列化数据,javascript,angularjs,django-rest-framework,Javascript,Angularjs,Django Rest Framework,我正在序列化用户Django Rest框架中的一组对象,并在前端使用angularjs检索信息。当我在浏览器中检查响应时,返回的对象数组的所有字段都是按字母顺序排列的,而不是我在后端给出的排序说明 {'hard_weight': 0L, 'current_count': 8020L, 'mileage': 0L, 'route_type': None, 'route': u'NO SCHEDULE', 'destination': None, 'pickup_id ': 657L, 'speci

我正在序列化用户Django Rest框架中的一组对象,并在前端使用angularjs检索信息。当我在浏览器中检查响应时,返回的对象数组的所有字段都是按字母顺序排列的,而不是我在后端给出的排序说明

{'hard_weight': 0L, 'current_count': 8020L, 'mileage': 0L, 'route_type': None, 'route': u'NO SCHEDULE', 'destination': None, 'pickup_id
': 657L, 'specials': 900000L, 'soft_weight': 0L, 'misses': 0L, 'date': datetime.date(2030, 12, 31), 'estimated_hours': Decimal('0.00'),
 'estimated_hours_unload': Decimal('0.00'), 'cancel': False}
是什么强制按字母顺序排列的?Django Rest框架还是angularjs?这个订单弄乱了我要创建的表

data['objects'] = serializer.data      
print data['objects'][0]               
return Response(data) 
{'hard_weight': 0L, 'current_count': 8020L, 'mileage': 0L, 'route_type': None, 'route': u'NO SCHEDULE', 'destination': None, 'pickup_id
': 657L, 'specials': 900000L, 'soft_weight': 0L, 'misses': 0L, 'date': datetime.date(2030, 12, 31), 'estimated_hours': Decimal('0.00'),
 'estimated_hours_unload': Decimal('0.00'), 'cancel': False}
从django打印输出

{'hard_weight': 0L, 'current_count': 8020L, 'mileage': 0L, 'route_type': None, 'route': u'NO SCHEDULE', 'destination': None, 'pickup_id
': 657L, 'specials': 900000L, 'soft_weight': 0L, 'misses': 0L, 'date': datetime.date(2030, 12, 31), 'estimated_hours': Decimal('0.00'),
 'estimated_hours_unload': Decimal('0.00'), 'cancel': False}
返回数据的console.log:

{'hard_weight': 0L, 'current_count': 8020L, 'mileage': 0L, 'route_type': None, 'route': u'NO SCHEDULE', 'destination': None, 'pickup_id
': 657L, 'specials': 900000L, 'soft_weight': 0L, 'misses': 0L, 'date': datetime.date(2030, 12, 31), 'estimated_hours': Decimal('0.00'),
 'estimated_hours_unload': Decimal('0.00'), 'cancel': False}
   cancel: false
    current_count: 8020
    date: "2030-12-31"
    destination: null
    estimated_hours: "0.00"
    estimated_hours_unload: "0.00"
    hard_weight: 0
    mileage: 0
    misses: 0
    pickup_id: 657
    route: "NO SCHEDULE"
    route_type: null
    soft_weight: 0
    specials: 900000
更新/解决方案 最后,我编写了这个函数来接收我的每个对象,并按照给定列表的顺序将它们放入数组中

{'hard_weight': 0L, 'current_count': 8020L, 'mileage': 0L, 'route_type': None, 'route': u'NO SCHEDULE', 'destination': None, 'pickup_id
': 657L, 'specials': 900000L, 'soft_weight': 0L, 'misses': 0L, 'date': datetime.date(2030, 12, 31), 'estimated_hours': Decimal('0.00'),
 'estimated_hours_unload': Decimal('0.00'), 'cancel': False}
function convertObjects(objects, list){              
    blank = []                                       
    for(var i=0; i <objects.length; i++)             
    {                                                
        obj = []                                     
        object = objects[i]                          

        for (var j=0; j<=list.length; j ++)  
        {                                            
            obj.push(object[list[j]])        
        };                                           
        blank.push(obj)                              
    };                                               

    return blank                                     
}                  
函数转换对象(对象,列表){
空白=[]

对于(var i=0;i来说,Django或AngularJS都没有顺序,这是因为JavaScript对象没有指定的顺序。请参阅ECMAScript规范,特别是:

{'hard_weight': 0L, 'current_count': 8020L, 'mileage': 0L, 'route_type': None, 'route': u'NO SCHEDULE', 'destination': None, 'pickup_id
': 657L, 'specials': 900000L, 'soft_weight': 0L, 'misses': 0L, 'date': datetime.date(2030, 12, 31), 'estimated_hours': Decimal('0.00'),
 'estimated_hours_unload': Decimal('0.00'), 'cancel': False}
4.3.3目标 类型对象的成员

{'hard_weight': 0L, 'current_count': 8020L, 'mileage': 0L, 'route_type': None, 'route': u'NO SCHEDULE', 'destination': None, 'pickup_id
': 657L, 'specials': 900000L, 'soft_weight': 0L, 'misses': 0L, 'date': datetime.date(2030, 12, 31), 'estimated_hours': Decimal('0.00'),
 'estimated_hours_unload': Decimal('0.00'), 'cancel': False}
注意:对象是属性的集合,具有单个属性 prototype对象。prototype可能是空值

{'hard_weight': 0L, 'current_count': 8020L, 'mileage': 0L, 'route_type': None, 'route': u'NO SCHEDULE', 'destination': None, 'pickup_id
': 657L, 'specials': 900000L, 'soft_weight': 0L, 'misses': 0L, 'date': datetime.date(2030, 12, 31), 'estimated_hours': Decimal('0.00'),
 'estimated_hours_unload': Decimal('0.00'), 'cancel': False}
请注意,它没有指定属性集合的顺序

{'hard_weight': 0L, 'current_count': 8020L, 'mileage': 0L, 'route_type': None, 'route': u'NO SCHEDULE', 'destination': None, 'pickup_id
': 657L, 'specials': 900000L, 'soft_weight': 0L, 'misses': 0L, 'date': datetime.date(2030, 12, 31), 'estimated_hours': Decimal('0.00'),
 'estimated_hours_unload': Decimal('0.00'), 'cancel': False}
在中定义对象属性枚举的规范也是相关的

{'hard_weight': 0L, 'current_count': 8020L, 'mileage': 0L, 'route_type': None, 'route': u'NO SCHEDULE', 'destination': None, 'pickup_id
': 657L, 'specials': 900000L, 'soft_weight': 0L, 'misses': 0L, 'date': datetime.date(2030, 12, 31), 'estimated_hours': Decimal('0.00'),
 'estimated_hours_unload': Decimal('0.00'), 'cancel': False}
枚举属性的机制和顺序(中的步骤6.a) 未指定第一种算法(第二种算法中的步骤7.a)

{'hard_weight': 0L, 'current_count': 8020L, 'mileage': 0L, 'route_type': None, 'route': u'NO SCHEDULE', 'destination': None, 'pickup_id
': 657L, 'specials': 900000L, 'soft_weight': 0L, 'misses': 0L, 'date': datetime.date(2030, 12, 31), 'estimated_hours': Decimal('0.00'),
 'estimated_hours_unload': Decimal('0.00'), 'cancel': False}
您必须在AngularJS中自定义客户端上的订单。但是,请注意,
orderBy
过滤器仅适用于数组。有关创建自定义指令以订购对象属性的信息,请参阅以下答案:

{'hard_weight': 0L, 'current_count': 8020L, 'mileage': 0L, 'route_type': None, 'route': u'NO SCHEDULE', 'destination': None, 'pickup_id
': 657L, 'specials': 900000L, 'soft_weight': 0L, 'misses': 0L, 'date': datetime.date(2030, 12, 31), 'estimated_hours': Decimal('0.00'),
 'estimated_hours_unload': Decimal('0.00'), 'cancel': False}

通常,dictionary/map/key-value数据结构不存储或关心键的顺序。具有相同键值但顺序不同的两个字典被认为是相同的。您甚至可以说字典中没有键顺序(不过也有一些字典的实现可以保持顺序)

{'hard_weight': 0L, 'current_count': 8020L, 'mileage': 0L, 'route_type': None, 'route': u'NO SCHEDULE', 'destination': None, 'pickup_id
': 657L, 'specials': 900000L, 'soft_weight': 0L, 'misses': 0L, 'date': datetime.date(2030, 12, 31), 'estimated_hours': Decimal('0.00'),
 'estimated_hours_unload': Decimal('0.00'), 'cancel': False}
如果您向最终用户显示它们的顺序很重要,例如在UI表中,您必须获取对象的键,对它们进行排序,然后使用每个键遍历对象以获得所需的值,则库中有
排序
UTIL供您使用

{'hard_weight': 0L, 'current_count': 8020L, 'mileage': 0L, 'route_type': None, 'route': u'NO SCHEDULE', 'destination': None, 'pickup_id
': 657L, 'specials': 900000L, 'soft_weight': 0L, 'misses': 0L, 'date': datetime.date(2030, 12, 31), 'estimated_hours': Decimal('0.00'),
 'estimated_hours_unload': Decimal('0.00'), 'cancel': False}