首页 > 解决方案 > Django中的有序列表

问题描述

谁能帮忙,我想在 Django 中使用包含整数和字符串的模型中的字段返回一个基于 forloop 的有序列表,格式为 MM/1234。该循环应在 html 模板中按升序返回具有最小整数 (1234) 的值。

标签: django

解决方案


理想情况下,您希望将模型更改为具有两个字段,一个整数和一个字符串,因此您可以编写一个基于整数 1 排序的查询集。然后,您可以定义模型的属性以返回self.MM+"/"+str( self.nn)复合值,如果您经常需要使用它。但如果它是其他人的数据库模式,这可能不是一个选项。

在这种情况下,您必须将查询集转换为列表(一次读取所有数据行),然后在 Python 中而不是在数据库中对列表进行排序。如果列表包含数百万个对象,您可能会耗尽内存或使服务器瘫痪。count=qs.count()是一个不会的数据库操作。

qs = Foo.objects.filter( your_selection_criteria)
# you might want to count this before the next step, and chicken out if too many 
# also this simple key function will crash if there's ever no "/" in that_field
all_obj = sorted( list( qs), 
            key = lambda obj: obj.that_field.split('/')[1] ) 

推荐阅读