Django查询和特定排序

时间:2017-03-10 16:48:58

标签: python django sorting django-models django-queryset

我是Django的新手以及它的查询方式。我认为我现在已经掌握了基础知识,但我仍然遇到了排序问题。

所以,让我说我有这个示例模型:

class Word_List(models.Model):
  list_name = models.CharField(max_length=64)
  number_of_words = models.IntegerField(default=0)

我有一些数据:

pk      list_name      number_of_words

1       vegetables     30
2       fruits         5
3       animals        7
4       objects        15
5       instruments    16
6       fruits         28

现在我希望它们按number_of_words排序,然后按list_name分组,顶部列表是分组中的重要列表。在这里,我想到的排序元素有一个更清晰的解释:

pk      list_name      number_of_words

1       vegetables     30
6       fruits         28
2       fruits         5
5       instruments    16
4       objects        15
3       animals        7

我尝试过一些东西,但我从未完全达到我的目的。我从这开始:

sorted_lists = Word_List.objects.all().order_by('-number_of_words')

当然它不够,因为它只对每个元素进行排序而不管它们的名字,所以我尝试了这个:

sorted_lists = Word_List.objects.all().order_by('list_name', -'number_of_words')

最终结果如下:

pk      list_name      number_of_words

3       animals        7    
6       fruits         28
2       fruits         5
5       instruments    16
4       objects        15
1       vegetables     30

Aaaand我被困住了,我正在考虑使用基本的python和多循环进行后请求排序,或者可能以某种方式处理多个请求,然后加入结果但我觉得可能有干净美丽的解决方案。

感谢。

1 个答案:

答案 0 :(得分:0)

实现这一目标的简单方法是:

query = Word_List.objects.all().query
query.group_by = ['-list_name']
query.order_by = ['-number_of_words']
sorted_list = QuerySet(query=query, model=Word_List)

请注意,这可能会在未来版本的Django中更改,因为它没有记录。使用Raw SQL查询是安全的:

Word_List.objects.raw('SELECT * FROM appname_Word_List ORDER_BY ....')