Django QuerySet 中计算列的总和

发布于 2024-08-24 22:04:09 字数 474 浏览 8 评论 0原文

给定以下贡献模型:

class Contribution(models.Model):
    start_time = models.DateTimeField()
    end_time = models.DateTimeField(null=True)

是否可以使用 Django 数据库 API 重现以下 SQL 语句?

SELECT SUM(end_time - start_time) AS total_duration FROM contribution;

我已经弄清楚了这么多:

Contribution.objects.aggregate(total_duration=models.Sum( ??? ))

但我不确定如何表示 end_time - start_time 部分。谢谢!

Given the following Contribution model:

class Contribution(models.Model):
    start_time = models.DateTimeField()
    end_time = models.DateTimeField(null=True)

is it possible, using the Django database API, to reproduce the following SQL statement?

SELECT SUM(end_time - start_time) AS total_duration FROM contribution;

I've figured out this much:

Contribution.objects.aggregate(total_duration=models.Sum( ??? ))

but I'm not sure about how to represent the end_time - start_time part. Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

£噩梦荏苒 2024-08-31 22:04:09

目前不可能,聚合内有一个用于 F() 对象的 ticket,但没有什么希望。

我看到的唯一方法是通过 python 中的 sum 来解决问题:

sum([x[1]-x[0] for x in Contribution.objects.values_list('start_time', 'end_time')])

Not possible at the moment, there's a ticket for F() objects inside aggregation, but nothing promising.

The only way i see is to workaround by sum in python:

sum([x[1]-x[0] for x in Contribution.objects.values_list('start_time', 'end_time')])
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文