how to sort by a computed value in django

前端 未结 3 1473
深忆病人
深忆病人 2020-12-19 07:53

Hey I want to sort objects based on a computed value in django... how do I do it?

Here is an example User profile model based on stack overflow that explains my pred

3条回答
  •  臣服心动
    2020-12-19 08:28

    As of Django-1.8, it is possible to sort a QuerySet using query expressions as long as the computed value can be rendered in SQL. You can also use annotations to the model as the order_by term.

    from django.db.models import F
    Profile.objects.annotate(reputation=(F('') + ...)).order_by("-reputation")
    

    Basic operations like +, -, *, / and ** can be used with F(). In addition there are several other functions such as Count, Avg, Max, ...

    Links:

    • Aggregation - order_by
    • Making Queries - filters can reference fields on a model
    • Query Expressions - Built in Expressions

    See also this SO Q&A: Order a QuerySet by aggregate field value

提交回复
热议问题