【问题标题】:Django Query set: Duration from two DateTimeField()Django 查询集:来自两个 DateTimeField() 的持续时间
【发布时间】:2021-11-30 18:03:22
【问题描述】:

在我的 Django 项目中,我有一个这样的模型-

class Task(models.Model):
    ticket_number = models.CharField()
    order_number = models.CharField()
    number_of_errors = models.IntegerField()
    start_time = models.DateTimeField()
    end_time = models.DateTimeField()

我想创建一个查询集“任务”,其中包括工作日期、票证编号、订单编号和工作小时(结束时间-开始时间),格式为 HH:MM:SS,例如 03:55:01 格式。 “working_date”将派生自 end_time。正确设置查询后,我会将结果导出为 CSV。

我可以像这样在 MySQL 中进行查询:

SELECT
    DATE(end_time) AS working_date,
    ticket_number, order_number, TIME_FORMAT((TIMEDIFF(end_time,start_time)),'%H:%i:%s') AS work_hours
FROM
    task
WHERE
    end_time>= pStartDate AND end_time< pEndDate;

我如何在 Django ORM 中做到这一点?

【问题讨论】:

    标签: django orm django-queryset


    【解决方案1】:

    你可以试试这个

    from django.db.models import ExpressionWrapper, F, fields
    
    
    duration = ExpressionWrapper(F('end_time') - F('start_time'), output_field=fields.DurationField())
    task_list = Task.objects.all().annotate(duration=duration)
    

    所以,假设您循环遍历任务并找出持续时间

    for task in task_list:
       print(task.duration)
    

    【讨论】:

      猜你喜欢
      • 2018-02-20
      • 2017-05-02
      • 2014-12-03
      • 1970-01-01
      • 1970-01-01
      • 2014-08-24
      • 2016-12-13
      • 1970-01-01
      • 2011-01-28
      相关资源
      最近更新 更多