回答

收藏

Django查询:如何从开始和结束时间字段中找到最大持续时间?

技术问答 技术问答 195 人阅读 | 0 人回复 | 2023-09-14

这是我的Django模型:
2 ^4 g" z. s3 ^- g+ n5 Zclass Shift(models.Model):        worker = models.OneToOneField('Worker',null=True)        date = models.DateField(null=True)        shiftTime = models.CharField(max_length=10,default="N/A")        timeIn = models.TimeField(null=True)        timeOut = models.TimeField(null=True)我需要找一个在给定的日期内花最多时间在办公室的工人。Django查询中的timeIn和timeOut字段计算持续时间?& h4 D9 [2 y3 [% D
编辑:我不想用另一个属性 持续时间,    因为这似乎是多余的。除了使用原始查询或持续时间属性外,还有其他方法吗?
6 p& z( X8 Z2 b& A+ o4 O+ v: X                                                               
& Q  {& `0 j% G    解决方案:                                                               
$ a- ^! @$ p/ x" h( ?0 ^% T( b' _                                                                Django
! u' k. E, _! J1.10引入了通过ORM本地执行日期/时差功能。此查询将为您提供最长的变化:. B* }3 Z& \; x/ A$ C0 F" }; E
from django.db.models import DurationField,ExpressionWrapper,Flongest_shift = Shift.objects.annotate(shift_length=ExpressionWrapper                                          F('timeOut') - F('timeIn               output_field=DurationField()))\.                                           order_by('-shift_length').first()可根据需要filter()在特定日期范围内添加子句,以增加过滤条件annotate()。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则