我想做一些排序,我想到的是使用名为 ordering 的参数执行 GET 请求,该值将是我将用于排序的模型属性:
?order=['-age', 'height']
Run Code Online (Sandbox Code Playgroud)
问题是当我尝试接收订单参数时。值是一个列表。
我尝试像这样使用 ast:
if 'order' in request.GET:
import ast
order = ast.literal_eval(request.GET.get('order'))
queryset = queryset.order_by(*order)
Run Code Online (Sandbox Code Playgroud)
有效。但是,我想避免使用 ast 库,还有其他方法吗?
更新
我这样做了我的参数:
?order=-age,height
并且像这样在 python 中使用 split :
if 'order' in request.GET:
order = request.GET.get('order').split(',')
queryset = queryset.order_by(*order)
Run Code Online (Sandbox Code Playgroud)
Res*_*ues 12
Django 允许在一个请求中发送多个 GET 参数,但是你发送它们的方式是错误的(不仅对于 Django)
你的请求应该是表单?order=-age&order=height
然后在视图中你可以做order_list = request.GET.getlist('order')
您不需要检查键“order”是否在 GET 参数中,因为.getlist()
如果找不到键,则返回一个空列表...
如果您只想要列表中的第一项,则可以使用request.GET.get('order')
which 在键不存在时返回 None 。
最终代码:
order_list = request.GET.getlist('order')
queryset = queryset.order_by(*order_list)
Run Code Online (Sandbox Code Playgroud)
PS虽然 django 允许将 GET 参数命名为任何名称,但 PHP(以及我认为其他网络语言)需要将 GET 列表参数命名为 param[](示例 order[]),因此像 JQuery 这样的库将您的 AJAX 请求参数命名为这样。在这种情况下,您必须在视图中使用正确的名称,即request.GET.getlist('order[]')
归档时间: |
|
查看次数: |
10641 次 |
最近记录: |