假设我想在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) -> ??:
我的问题是:
- 我应该在
compile_ob
函数中写些什么 - 我应该以类型返回什么
您实际上不需要函数来实现这一点。这里有一个例子:
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)