2012-01-16 2 views
3

장고 관리자에서는 모든 작업 기간의 합계를 표시하려고합니다. 나는 그것을 추가 필드 wirh 해결. 합 정수 배로 변환 기 때문에Django admin extra field Sum() TimeField

1시 30분 0초 H 3시 45분 0초 H

의 합 47500,0에 합산된다. django-admin: Add extra row with totals

class MyChangeList(ChangeList): 

    def get_results(self, *args, **kwargs): 
    super(MyChangeList, self).get_results(*args, **kwargs) 
    q = self.result_list.aggregate(status_sum=Sum('duration')) 
    self.status_count = q['action_sum'] 

... 

class ActionAdmin(admin.ModelAdmin): 

    def get_changelist(self, request): 
    return MyChangeList 

class Meta: 
    model = Status 

list_display = ('name', 'duration') 

기간이 modles.py에 TimeField로 defienes입니다 :

class Action (models.Model): 

    duration = models.TimeField() 

누군가가 총을 변경하는 방법을 알고이 여기에 설명 된 것처럼

내 admin.py 변경 MyChangeList에() 함수가 있습니까? 나는 시간 값을 float 또는 integer로 변경하고, 합계를 만들어 다시 변환해야한다고 생각한다.

의견이 있으십니까?

고마워요.

답변

2

MySQL을 사용하고 있다고 가정합니다. 요약 시간이 old bug입니다 (현재 수정 된 것인지 모르겠습니다).

기간을 분 단위로 저장할 수 있습니다 (괜찮 으면 15 분 단위로). 또는 django-durationfield을 사용할 수 있습니다.

+0

저는 MySQL을 사용하고 있습니다. 나는 당신이 언급 한 mysql 버그라고 생각한다. 덕분에 ** django-durationfield **를 설치하고 MyChangeList의 마지막 두 줄을 다음과 같이 변경했습니다 : class MyChangeList(ChangeList): ... q = self.result_list.aggregate(status_sum=Sum('duration')) self.status_count = timedelta(microseconds=q['action_sum']) 이제 작동합니다 ;-) – surfi