2014-09-03 2 views
1

나는 멘토링 목적으로 웹 사이트를 구축 중입니다. 그곳에서 멘토들과의 만남에 대해 멘토들로부터 통나무가 들어옵니다. 대시 보드의 일부로 필자는 필요한 데이터를 노출시키고 컴퓨팅하고 노출하는 중입니다.장고 사용자 지정 집계

문제 설명 : 멘토링 모임을 위해 로그가 들어오는 평균 빈도를 확인하십시오.

내 접근법 :

1 단계, 즉 모든 계산 멘토 두 즉시 발생하는 로그 차이의 평균 평균 주파수.

2 단계 계산 단계에서 계산 된 각 멘토링의 평균 주파수의 평균 내가 그때 멘토링에 의해 그룹에 로그를 필요로 할 것이다 것을 알고있다 1.

사용자 정의에 전달 1 단계와 2 단계를 수행하는 집계 함수. 어떻게 장고에서 할 수 있습니까? 누군가가 나를 도와 주실 수 있습니까? 미리 감사드립니다.

답변

0

먼저 을 알아야합니다. 여기서 계산을해야합니다. 그들은 각각 찬반 양론이 가능한 두 개의 장소입니다.

계산을 수행 할 첫 번째 위치는 데이터베이스 계층입니다. 불행히도 당신은 기본적으로 쿼리를 작성하는 종류의 함수를 장고에 가지고 있지 않습니다. 그런 다음 raw query이 필요합니다. 또한 분석을 지원하는 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을 사용하여 수행 할 수 있습니다. 이 점에서 쉽게 추론 할 수 있습니다.

계산을 수행 할 두 번째 위치는 응용 프로그램 레이어입니다. 모델에서 로그 시간을 가져 와서 파이썬에서 평균을하십시오 :

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) 

코드를 시작하는 데 필요한 자료가 있습니까? 즐겨.