如何在django queryset中返回order_by参数的字符串表达式



假设我想在Django项目的views中这样做:

order_by_query = request.query_params.get("order_by", "")
order_by_expression = compile_ob(order_by_query)
qs = SomeModel.objects.all().order_by(order_by_expression)

我希望order_by_query是一个类似"field1,-field2"的字符串。

所以我会写一个函数,比如:

def compile_ob(expression: str) -> ??:

我的问题是:

  1. 我应该在compile_ob函数中写些什么
  2. 我应该以类型返回什么

您实际上不需要函数来实现这一点。这里有一个例子:

SomeModel.objects.all().order_by(*order_by_query.split(","))

或者您可以从compile_ob函数返回一个列表,并将其与星号表达式一起使用。

from typing import List
def compile_ob(expression: str) -> List[str]:
return expression.split(",")
# somewhere in views.py
order_by_query = request.query_params.get("order_by", 'display_order')
order_by_expression = compile_ob(order_by_query)
SomeModel.objects.all().order_by(*order_by_expression)

最新更新