A.J*_*.J. 6 python django django-orm
我有一张桌子student。它具有以下属性
name, 
age, 
school_passout_date, 
college_start_date
我需要一份报告,以了解avg number of days在通过学校和开始大学学习之间,学生可以获得什么自由。
目前,我正在为每个学生寻找天数并获取其平均值的价值范围感到恼怒。
当记录集变大时,效率极低。
Django ORM中有什么功能可以给我两个日期之间的总计天数?
我正在寻找这样的东西。
Students.objects.filter(school_passed=True, started_college=True).annotate(total_days_between=Count('school_passout_date', 'college_start_date'), Avg_days=Avg('school_passout_date', 'college_start_date'))
最好,
你可以这样做:
Model.objects.annotate(age=Cast(ExtractDay(TruncDate(Now()) - TruncDate(F('created'))), IntegerField()))
这使您可以使用整数值,例如,您可以执行以下操作:
from django.db.models import IntegerField, F
from django.db.models.functions import Cast, ExtractDay, TruncDate
qs = (
    Model
    .objects
    .annotate(age=Cast(ExtractDay(TruncDate(Now()) - TruncDate(F('created'))), IntegerField()))
    .annotate(age_bucket=Case(
        When(age__lt=30, then=Value('new')),
        When(age__lt=60, then=Value('current')),
        default=Value('aged'),
        output_field=CharField(),
    ))
)
Django 目前只接受 4 个函数的聚合:Max、Min、Count 等 Average,所以这做起来有点棘手。
那么解决方案就是使用extra方法。那样:
Students.objects.
    extra(select={'difference': 'school_passout_date' - 'college_start_date'}).
    filter('school_passed=True, started_college=True)
但是,你仍然需要在服务器端进行平均
| 归档时间: | 
 | 
| 查看次数: | 1621 次 | 
| 最近记录: |