Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:按组合的两列排序_Django_Django Queryset - Fatal编程技术网

Django:按组合的两列排序

Django:按组合的两列排序,django,django-queryset,Django,Django Queryset,我有以下疑问;有两列(dateEmploymentRD和dateTerminationRD) 我想用两个组合的coulmn(dateEmploymentRD和dateTerminationRD)对查询集进行排序 但我的查询是先按“DateEmploymentTRD”排序,然后按“dateTerminationRD”排序,如下所示 如何按组合的两列对查询进行排序 Edit-1:Added views.py def index(request): qsPersonnel = filterPe

我有以下疑问;有两列(dateEmploymentRD和dateTerminationRD)

我想用两个组合的coulmn(dateEmploymentRD和dateTerminationRD)对查询集进行排序

但我的查询是先按“DateEmploymentTRD”排序,然后按“dateTerminationRD”排序,如下所示

如何按组合的两列对查询进行排序

Edit-1:Added 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)
def索引(请求):
QSpersonal=过滤器人员(请求)
QSPersonalGraduateLevel=QSPersonal.values('graduateLevel',).annotate(Count('graduateLevel')).order_by()
QSPersonalTask=QSPersonal.values('task',).annotate(Count('task')).order_by()
qsPersonelgender=qsporterson.values('gender',).annotate(Count('gender')).order_by()
personnelDateMin=request.GET.GET('personnelDateMin')
personnelDateMax=request.GET.GET('personnelDateMax')
personnelDateMaxMin=dtt.strTime(personnelDateMin,%Y-%m-%d').date()
personnelDateMaxDate=dtt.strTime(personnelDateMax,%Y-%m-%d').date()
qsPersonnelsum=过滤器personnelsum(请求)
personnelChart={}
qsPersonnelsumbase=filterPersonnelsum(请求).aggregate(计数('id'))
b=qsPersonnelsumbase['id\u count']
personnelChart[personnelDateMin]=b
对于QSI人员:
如果i.dateTerminationRD和i.dateTerminationRDpersonnelDateMaxMin:
b+=1
人事记录[str(i.dateEmploymentRD)]=b
personnelchartsorded=dict(已排序(personnelChart.items()))
上下文={
“QSpersonal”:QSpersonal,
“qsPersonelgraduatelevel”:qsPersonelgraduatelevel,
“qsPersoneltask”:qsPersoneltask,
“qsPersonelgender”:qsPersonelgender,
}
返回呈现(请求'index.html',上下文)

要按两列中最早的一列排序,您必须添加一个注释,使用该注释计算两列中最早的一列,然后您可以按注释排序

import datetime
from django.db.models.functions import Least, Coalesce

qsPersonnel = qsPersonnel.annotate(
    earliest=Coalesce(
        Least('dateEmployementRD', 'dateTerminationRD'),
        datetime.datetime.max
    )
).order_by('earliest')

你说的“联合”是什么意思?你想按两者之差还是两者之和来排序?我的意思是:我有两个柜,我想订两个柜中最早的一个,先来。非常感谢。它正在工作,但由于有空行的提示,它并不完全正常。请查看附件中的图片。前3行不是“最早”订购。甚至我也尝试了
最伟大的
@Seckinyilmaz您使用哪种数据库?文件中确实提到了DBs之间的不一致行为this@Seckinyilmaz使用
Coalesce
您应该能够获得正确的行为。更新了应答器,但命令不正确。空日期区域没有从旧到新排序:(您可以添加您的模型吗?看起来结果像字符串一样排序??
import datetime
from django.db.models.functions import Least, Coalesce

qsPersonnel = qsPersonnel.annotate(
    earliest=Coalesce(
        Least('dateEmployementRD', 'dateTerminationRD'),
        datetime.datetime.max
    )
).order_by('earliest')