如何在Django中对模型对象进行排序

时间:2018-01-25 10:17:48

标签: django django-models

以下代码在幕后执行的操作:sorted(MyModel.objects.all())

__lt__吗?它是如何定义的?

谢谢。

3 个答案:

答案 0 :(得分:1)

它只是将查询集转换为列表并尝试对对象进行排序。由于我不认为Django已经在模型的基类中定义了比较方法的默认实现,所以很可能它是基于随机参数(如内存地址)对它们进行排序。

如果您希望数据库为您排序,那么您必须使用查询集提供的order_by,或者您可以为排序的方法本身提供key

sorted(MyModel.objects.all(), key='pk')

答案 1 :(得分:0)

您可以使用Model的Meta上的排序字段来定义要排序的字段。

ordering = ['-order_date'] # order_date field reverse sorted

查找更多信息:Model Meta Ordering

答案 2 :(得分:0)

实际上,至少在Python 3中,这段代码会给你一个错误:

'<' not supported between instances of 'MyModel' and 'MyModel'

这是因为,正如其他答案所述,models.Model没有定义任何比较方法;在这种情况下,Python不会猜测,正如Python的Zen所推荐的那样:

  

面对模棱两可,拒绝猜测的诱惑。