Django管理后台额外字段Sum()时间字段

4 投票
1 回答
1400 浏览
提问于 2025-04-17 10:21

在Django的后台管理系统中,我想显示所有操作持续时间的总和。我通过添加一个额外的字段解决了这个问题。但是,

比如说,

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

持续时间在modles.py中定义为TimeField:

class Action (models.Model):

    duration = models.TimeField() 

有没有人知道如何在MyChangeList中修改aggregate()函数?我觉得我需要把时间值转换成浮点数或整数,求和后再转换回来。

有什么建议吗?

非常感谢。

1 个回答

3

我猜你在使用MySQL。它有一个关于时间相加的老问题(我不知道现在是否修复了)。

你可以把持续时间存储为分钟(或者如果可以的话,存储为15分钟)。或者你也可以使用django-durationfield

撰写回答