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 多个字段的主要内容,如果未能解决你的问题,请参考以下文章

Django数据查询中对字段进行排序

080:Django数据库QuerySet API详解-order_by:

多对多字段上的 order_by 导致查询集中的重复条目

queryset,union,order_by 在带注释的字段上

Django order_by一个属性

从其他字段派生的 Django 可排序字段