首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django查询:如何从开始和结束时间字段找到最长时间?

Django查询:如何从开始和结束时间字段找到最长时间?
EN

Stack Overflow用户
提问于 2016-08-29 19:14:11
回答 2查看 1.1K关注 0票数 3

以下是我的Django模型:

代码语言:javascript
复制
class 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字段计算持续时间?

编辑:我不想使用另一个属性工期,因为这似乎是多余的。除了使用原始查询或工期属性之外,还有其他方法可以做到吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-30 03:07:56

Django 1.10通过ORM引入了本地进行日期/时间差异功能。这个查询将使您得到最长的移位:

代码语言:javascript
复制
from django.db.models import DurationField, ExpressionWrapper, F

longest_shift = Shift.objects.annotate(shift_length=ExpressionWrapper(
                                           F('timeOut') - F('timeIn'),
                                           output_field=DurationField()))\.
                                           order_by('-shift_length').first()

可以根据需要添加特定日期范围的筛选器,方法是在filter()之前添加一个annotate()子句。

票数 4
EN

Stack Overflow用户

发布于 2016-08-31 07:49:52

遍历对象并获得timeIn和timeOut之间的最大持续时间。

代码语言:javascript
复制
def get_largest_time_diff():
    shift_objs = Shift.objects.all()
    time_diff = 0

    if shift_objs:
       time_diff = shift_objs[0].timeOut - shift_objs[0].timeIn

       for tm in shift_objs[1:]:
           if time_diff < tm.timeOut - tm.timeIn:
               time_diff = tm.timeOut - tm.timeIn

    return time_diff
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39213525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档