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()。 |
|
|
|
|
|