我是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和多循环进行后请求排序,或者可能以某种方式处理多个请求,然后加入结果但我觉得可能有干净美丽的解决方案。
感谢。
答案 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 ....')