我有以下查询;有两列(dateEmploymentRD 和 dateTerminationRD)。
qsPersonnel = qsPersonnel.filter(Q(dateEmploymentRD__isnull=False),
Q(dateEmploymentRD__lte=personnelDateMax),
Q(dateTerminationRD__gte=personnelDateMin) | Q(dateTerminationRD__isnull=True),
Q(dateTerminationRD__lte=personnelDateMax) | Q(dateTerminationRD__isnull=True)).order_by('dateEmploymentRD','dateTerminationRD')
我想用组合的两个 coulmns(dateEmploymentRD 和 dateTerminationRD)对该查询集进行排序。
但我的查询首先订购“dateEmployementRD”,然后按“dateTerminationRD”订购,如下所示。
如何通过组合两列来排序我的查询?
编辑 1:添加了 views.py
def index(request):
qsPersonnel = filterPersonnel(request)
qsPersonelgraduatelevel= qsPersonnel.values('graduateLevel',).annotate(Count('graduateLevel')).order_by()
qsPersoneltask = qsPersonnel.values('task',).annotate(Count('task')).order_by()
qsPersonelgender = qsPersonnel.values('gender',).annotate(Count('gender')).order_by()
personnelDateMin = request.GET.get('personnelDateMin')
personnelDateMax = request.GET.get('personnelDateMax')
personnelDateMaxMin = dtt.strptime(personnelDateMin,'%Y-%m-%d').date()
personnelDateMaxDate = dtt.strptime(personnelDateMax,'%Y-%m-%d').date()
qsPersonnelsum = filterPersonnelsum(request)
personnelChart = {}
qsPersonnelsumbase = filterPersonnelsum(request).aggregate(Count('id'))
b = qsPersonnelsumbase['id__count']
personnelChart[personnelDateMin] = b
for i in qsPersonnel:
if i.dateTerminationRD and i.dateTerminationRD < personnelDateMaxDate:
b -= 1
personnelChart[str(i.dateTerminationRD)] = b
elif i.dateEmploymentRD and i.dateEmploymentRD > personnelDateMaxMin:
b += 1
personnelChart[str(i.dateEmploymentRD)] = b
personnelChartSorted = dict(sorted(personnelChart.items()))
context ={
'qsPersonnel' : qsPersonnel,
'qsPersonelgraduatelevel' : qsPersonelgraduatelevel,
'qsPersoneltask' : qsPersoneltask,
'qsPersonelgender' : qsPersonelgender,
}
return render(request, 'index.html', context)
要按两列中最早的排序,您必须添加一个使用 计算两列中最早的注释Least
,然后您可以按注释排序
import datetime
from django.db.models.functions import Least, Coalesce
qsPersonnel = qsPersonnel.annotate(
earliest=Coalesce(
Least('dateEmployementRD', 'dateTerminationRD'),
datetime.datetime.max
)
).order_by('earliest')
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句