【问题标题】:Find total time spent by user on the website.查找用户在网站上花费的总时间。
【发布时间】:2014-03-05 11:30:10
【问题描述】:

如何在 Django ORM 中获取两个字段的差之和?

我有一个映射用户活动的模式。我在用户登录时添加时间,并在用户注销时添加时间。

我需要这两个字段的差异,然后将所有实例加在一起来获得用户在网站上花费的总时间。

User.objects.filter(**user_kwargs).annotate(
            visit_count=Count('visit_history'),
            time_on_site=Avg('visit_history__time_on_site'),
        ).filter(visit_count__gt=0).order_by('-time_on_site')

如何查看用户花费的总时间?

【问题讨论】:

    标签: mysql django orm modal-dialog


    【解决方案1】:

    我认为你不能用 django orm 做到这一点。

    无论如何,至少要使用原始查询。

    让我重复一遍,以便您验证我是否理解正确。

    您要选择 model.field_a 和 model.field_b 之间的差值之和。

    Django orm 只允许您选择模型字段,而不是它们的差异或总和。如果您想在这里使用 django orm,则创建附加模型并使用原始查询和聚合函数。原始查询将是创建幽灵字段的查询,具有类似

    SELECT ..., row.one_value - row.second_value AS row.somecolumn, ... FROM foo ...
    

    但是既然你已经需要用纯 sql 来搞定了,那么我建议你完全跳过 orm 并使用事务和连接,只使用纯 sql 来获得你需要的东西。

    【讨论】:

    • 谢谢@odif :) 我认为这正是我需要做的。
    猜你喜欢
    • 2019-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    • 2014-01-25
    • 2011-07-22
    相关资源
    最近更新 更多