Django:Order_by 多个字段
Posted
技术标签:
【中文标题】Django:Order_by 多个字段【英文标题】:Django: Order_by multiple fields 【发布时间】:2016-08-02 13:25:47 【问题描述】:我以列表的形式获取 order_by 字段。 我想用 django orm 按多个字段排序。 列表如下:
orderbyList = ['check-in','check-out','location']
我写的查询是这样的:
modelclassinstance.objects.all().order_by(*orderbyList)
我在列表中所期望的一切都是动态的。我没有预先定义的数据集。有人能告诉我如何用这个写一个 django ORM 吗?
【问题讨论】:
【参考方案1】:试试这样的
modelclassinstance.objects.order_by('check-in', 'check-out', 'location')
你不需要.all()
您还可以在模型类中定义排序
类似
class Meta:
ordering = ['check-in', 'check-out', 'location']
【讨论】:
谢谢我知道了..我是从其他链接获得的。 modelclassinstance.objects.order_by(*orderbyList)【参考方案2】:在查询参数中传递订单列表 例如:yourdomain/?order=location&order=check-out
default_order = ['check-in'] #default order
order = request.GET.getlist('order', default_order)
modelclassinstance.objects.all().order_by(*orderbyList)
【讨论】:
【参考方案3】:您应该将数据库表列的字符串化参数列表(由您的 ORM 在相应的 models.py 文件中指定)传递给返回查询集上的 .order_by()
方法,如下所示。 shifts = Shift.objects.order_by('start_time', 'employee_first_name')
。通过符号,.order_by(**args)
,将帮助您记住它接受任意数量的参数。
【讨论】:
【参考方案4】:modelclassinstance.objects.filter(anyfield='value').order_by('check-in', 'check-out', 'location')
【讨论】:
正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。【参考方案5】:试试这个:
listOfInstance = modelclassinstance.objects.all()
for askedOrder in orderbyList:
listOfInstance = listOfInstance.order_by(askedOrder)
【讨论】:
modelclassinstance.objects.order_by(*orderbyList) 是 order_by 的更好方法 根据 Django 文档 (docs.djangoproject.com/en/2.0/ref/models/querysets/#order-by),这种方式无法达到预期的效果——“每个 order_by() 调用都会清除之前的任何排序。” 这最终没用,因为实例列表永远不会保存【参考方案6】:你要做的就是链接查询集,换句话说:
classExample.objects.all().order_by(field1).order_by(field2)...
【讨论】:
不要那样做。每个order_by()
调用都会清除之前的任何订单。例如,此查询将按field2
而非field1
排序!!!以上是关于Django:Order_by 多个字段的主要内容,如果未能解决你的问题,请参考以下文章
080:Django数据库QuerySet API详解-order_by: