以下代码在幕后执行的操作:sorted(MyModel.objects.all())
?
是__lt__
吗?它是如何定义的?
谢谢。
答案 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所推荐的那样:
面对模棱两可,拒绝猜测的诱惑。