Python Django自定义聚合

Python Django自定义聚合,python,django,Python,Django,我正在建立一个网站,用于指导目的。其中,来自导师的日志记录了与学员的会议进展如何。作为dashboard的一部分,我将公开/计算并公开所需的数据 问题陈述:找出日志收集指导信息的平均频率 我的做法: 第一步。计算平均频率,即每次指导的两个立即发生的日志之间差异的平均值 第二步。计算步骤1中计算的每个指导的平均频率的平均值 我知道,我需要通过指导对日志进行分组,然后将其传递给执行步骤1和步骤2的自定义聚合函数。我在Django怎么做?有人能帮我解决这个问题吗?提前感谢。首先,您需要知道在哪里进行计

我正在建立一个网站,用于指导目的。其中,来自导师的日志记录了与学员的会议进展如何。作为dashboard的一部分,我将公开/计算并公开所需的数据

问题陈述:找出日志收集指导信息的平均频率

我的做法:

第一步。计算平均频率,即每次指导的两个立即发生的日志之间差异的平均值

第二步。计算步骤1中计算的每个指导的平均频率的平均值


我知道,我需要通过指导对日志进行分组,然后将其传递给执行步骤1和步骤2的自定义聚合函数。我在Django怎么做?有人能帮我解决这个问题吗?提前感谢。

首先,您需要知道在哪里进行计算。它们是两个可能的地方,每一个都有利弊

计算的第一个位置是数据库层。不幸的是,在django中没有那种本机编写查询的函数。那你需要一张支票吗。您还需要具有分析支持的DBMS吗:

sql = """    
    with table_with_predates as (
      SELECT Id,
           some_date,
           lag(some_date) pre_date
      FROM menthors
      WINDOW client_window as (partition by client order by idMenthor)
    ) select Id, avg( some_date - pre_date)  as data_average
      from table_with_predates
      group by Id      
    """
menthors = Menthor.objects.raw( sql )
print ( 'Menthor average', menthors[0].name, menthors[0].data_average )
第二步可以使用自定义sql完成。从这一点可以很容易地推断出来

进行计算的第二个位置是应用程序层。从模型中获取日志时间,并在python中进行平均:

log_times = ( Log
              .objects
              .filter( menthor = some_menthor )
              .values_list('some_date', flat=True)
            )
menthor_average_log = reduce(lambda x, y: x + y, log_times) / len(log_times)
你现在有材料开始你的代码了吗。享受