2012-06-23 59 views
3

我有一個字段列表以選擇不同的,就像這樣:Django的查詢集值()方法字段順序與返回

field_names = [u'name', u'mobile', u'address', u'email', u'sex'] 

渲染下面的模板:

return render_to_string('templatetags/index.html', { 
    'objects':User.objects.all().values(*field_names) 
}) 

但返回的結果字段順序與輸入字段順序不同:

輸入模板{{objects}}:

{u'mobile': u'18680868047', u'email': u'', u'sex': u'U', u'name': u'\u4f55\u667a\u5f3a', u'address': u'\u8944\u9633\u5357\u8def175\u53f7 \u73af\u4e2d\u5546\u53a6 410\u5ba4'} 

這是我的模板:

<table> 
{% for object in objects %} 
<tr> 
{% for key,value in object.items %} 
    <td class="{{key}}">{{ value }}</td>{% endfor %} 
</tr> 
{% endfor %} 
</table> 

回答

5

queryset.values()返回類型的字典列表,http://stardict.sourceforge.net/Dictionaries.php下載不以任何特定的順序返回自己的物品。

如果你想要你的值的順序,使用queryset.values_list它返回的元組列表。

(你將需要保持在一個單獨的上下文變量列的列表)

0

我使用OrderedDict集合對象來解決問題,排序等領域。

objects_list = [] 
for row in queryset: 
    ordered_dict = collections.OrderedDict() 
    for col in self.field_names: 
     ordered_dict[col] = row[col] 
    objects_list.append(ordered_dict) 
相關問題