2015-09-22 44 views
-1

我对某些模型进行查询,并从生成的queryset对象返回一个评估列表。python根据json字段中的值排序django模型

此模型中的一个字段是一个包含json字符串的文本字段。我想根据json中的键值对模型列表进行排序。

例JSON:

meta_data = "{'V1': { 
       'key': key, 
       'timestamp': timestamp, 
       'current': True, 
       'conversion_type': conversion_type, 
       'filename': filename}, 
      'V2': { 
       'key': key, 
       'timestamp': timestamp, 
       'current': False, 
       'conversion_type': conversion_type, 
       'filename': filename}, 
      'notes': []}" 

的键/值对要么A.)的一个版本(V1,V2等)键,时间戳等或B.)的注释。我需要忽略笔记,找到Version = current = True的版本,并使用该版本的时间戳进行排序。

我想这一点:

def get_version_created_time(meta_data): 
    meta_data = json.loads(meta_data) 
    for key, value in meta_data.iteritems(): 
     try: 
      if value['current'] == True: 
       return value['timestamp'] 
     except KeyError: 
      pass 

list_of_models.sort(key=get_version_created_time(operator.attrgetter('meta_data'))) 

,但我的函数需要一个字符串,operator.attrgetter( 'meta_data')是不是字符串。我应该如何获取meta_data字段的json字符串,以便将其传递给我的函数以查找当前版本的时间戳,或者按照我所描述的方式对模型列表进行排序的正确方法是什么。

感谢,

+1

我希望我知道为什么我的问题被低估了。 –

回答

0

这是解决方案:我的函数传递的只是需要采用正确的参数类型,这是一个模型,并调用Django的model_to_dict这样我就可以拉JSON出来的排序键领域,并通过它来查看我想要的价值。

def get_version_created_time(item): 
    u = model_to_dict(item) 
    meta_data = json.loads(u['meta_data']) 
    for key, value in meta_data.iteritems(): 
     try: 
      if value['current'] == True: 
       return value['timestamp'] 
     except TypeError: 
      pass 

res_sorted = sorted(res, key=get_version_created_time, reverse=True) 
相关问题