2011-03-28 3 views
1

장고 모델이 있으며 이에 대한 통계를 보여 드리고자합니다. 예 : 나는 그것에 색깔과 같은 필드가 있고 얼마나 많은 항목이 "빨강", "녹색"등으로 설정된 색을 가지고 있는지 표시하고 싶습니다.Django는 통계를 최신으로 유지합니다.

저는 테이블과 여러 색상의 행이 많기 때문에 모든 읽기에 대한 각 통계의 합계를 계산하고 싶지는 않습니다.

따라서 계산 된 합계를 보유하는 두 번째 테이블을 만들려고했습니다. 하지만 이제이 정보를 원본 테이블과 동기화하여 보관해야합니다. 예 : 엔트리가 추가, 삭제 또는 수정 될 때마다 통계 테이블을 업데이트해야합니다.

어떻게하면 좋을까요?

답변

3

행 수에 따라 다르지만 일반적으로 select count(id) ... GROUP BY은 빠릅니다.

그렇지 않으면 Django signals은 이러한 목적으로 매우 흥미로운 개념입니다. 모델 저장/삭제와 같은 일부 이벤트를 듣거나 사용자 정의 신호를 사용할 수 있습니다.

귀하의 경우, 모델 post_savepost_delete 신호를 듣고 싶습니다. 를 heres 예를 들어

:

from django.db.models import signals 
import models 

def itemSaved(sender, **kwargs): 
    obj = kwargs['instance'] 
    colorMod = models.Color.get(name = obj.color) 
    colorMod.count = colorMod.count + 1 
    colorMod.save() 

# listen to post_save event for model MyModel 
signals.post_save.connect(itemSaved, sender=models.MyModel) 

놓습니다 models.py

희망이 도움이 내부 코드.

편집 : 또한 나는 사용자 지정 후 저장하고 핸들러를 삭제 사용하여 접근 방식을 사용, 많은, 단일 SQL 작업

+0

안녕에 대한 감사를이 new F operator technique example를 참조하십시오. 나는 데이터베이스의 일관성에 대해 조금 불안하다. 따라서 +1 값으로 카운트 값을 업데이트하지 않고 모든 변경 사항을 자세히 기록합니다. 그렇지 않으면 업데이트 도중 감소 및 증가해야합니다 (예 : pre_save, decrement 및 post_save 증가분). – Fabian

관련 문제