【发布时间】:2015-05-26 07:20:39
【问题描述】:
Model1(models.Model):
name = models.CharField(max_length=30)
Model2(models.Model):
model1 = models.ManyToManyField(FontClass)
res = Model1.objects.all().filter(....).order_by('model1__name....???')
如何按更复杂的条件对结果进行排序,例如model1__name 的名称中是否有下划线?例如,Model1.objects.all().filter(....) 返回以下名称:
aaa_bbb
aaaccc
aaa_ttt
aaa_ddd
ggggg
yyy_cccc
zzz_kkk
dddd
排序后应该是:
aaa_bbb
zzz_kkk
aaa_ddd
aaa_ttt
yyy_cccc
aaaccc
ggggg
dddd
首先是名称中带有下划线的那些,然后是 - 没有它。
请注意,条件只是一个示例,我想按更复杂的条件进行排序,我只是想知道如何做到这一点。
【问题讨论】:
-
您可以将结果分成两个列表,然后按字母顺序对它们进行排序。
-
Queryset.order_by()依赖于数据库排序,IOW 它只是添加了一个 SQLorder by子句。因此,您可以尝试设置数据库以获得所需的排序,或者(如果您的典型数据集不是太大)进行纯 python 排序,但这可能效率较低。