在 Django 中通过计算自定义排序

rab*_*bid 1 sorting django

Django 中有自定义计算排序的解决方案吗?我想创建一个视图来显示我的博客中的热门帖子。排名将根据帖子的属性进行计算。假设我有 3 个 IntegerFields,分别称为 x、y 和 z,排名计算结果为 x * y / z。

有任何想法吗?我想做最热门的帖子,以及按时间过滤的其他变体,例如过去 24 小时、7 天、1 个月等。

谢谢!

man*_*nji 5

您可以用来extra检索额外的计算列并按其排序:

MyModel.objects.filter(post_date__lt=#date#)
       .extra(select={'custom_order': "x*y/z"}).order_by('custom_order')
Run Code Online (Sandbox Code Playgroud)

这种方法的问题在于,您正在编写 sql,因此它并不总是可以跨数据库移植(尽管对于您提供的示例,可以避免此问题,因为它是一个简单的计算)

否则,您可以使用纯 python 进行排序:

sorted_models = sorted(MyModel.objects.filter(post_date__lt=#date#)
                , key=lambda my_model:my_model.x*my_model.y/my_model.z))
Run Code Online (Sandbox Code Playgroud)