Дополнительное поле администратора Django Sum () TimeField - PullRequest
3 голосов
/ 16 января 2012

В Django Admin я хочу отобразить сумму всех длительностей действий.Я решил это с помощью дополнительного поля.Но сумма

01: 30: 00 ч 03:45:00 ч

суммируется с 47500,0, потому что сумма преобразуется в целое число.

Я изменил свойadmin.py, как описано здесь: django-admin: добавить дополнительную строку с итогами

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')

Продолжительность определяется как TimeField в modles.py:

class Action (models.Model):

    duration = models.TimeField() 

Кто-нибудь знает, как изменить функцию aggregate () в MyChangeList?Я думаю, что мне нужно изменить значения времени на float или integer, сделать сумму и затем преобразовать ее обратно.

Любое предложение?

Большое спасибо.

1 Ответ

2 голосов
/ 16 января 2012

Полагаю, вы используете MySQL. У него старая ошибка при суммировании времени (я не знаю, исправлено ли это сейчас).

Вы можете сохранить продолжительность в минутах (или 15 минутах, если все в порядке). Или вы можете использовать django-durationfield .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...