Django中的有序列表

时间:2019-05-30 16:07:09

标签: django

任何人都可以帮忙,我想使用模型中包含MM / 1234格式的整数和字符串的字段,返回基于Django中forloop的有序列表。循环应在html模板中以升序返回值,其中interger(1234)最小。

1 个答案:

答案 0 :(得分:0)

理想情况下,您希望将模型更改为具有两个字段,一个整数和一个字符串,因此您可以基于整数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] )