2014-03-05 53 views
0

如何获得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') 

如何找到用户花费的总时间?

回答

0

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

无论如何不是至少使用原始查询。

让我重复一些事情,以便您可以验证,如果我正确理解你的话。

您想要选择model.field_a和model.field_b之差的总和。

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

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

创建幻影场,一但既然你已经需要开始和肮脏与纯SQL,那么我建议你完全跳过ORM和使用交易和连接和只是纯粹的SQL来获得你所需要的。

+0

谢谢@odif :) 我认为这正是我需要做的。 – Clayton

相关问题