Django:Order_by 合并了两列

塞金耶尔马兹

我有以下查询;有两列(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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章