【问题标题】:Django admin extra field Sum() TimeFieldDjango 管理员额外字段 Sum() TimeField
【发布时间】:2012-02-11 08:26:37
【问题描述】:

在 Django Admin 中,我想显示所有操作持续时间的总和。我用一个额外的字段解决了它。但总和

01:30:00 小时 03:45:00 小时

求和为 47500,0,因为 sum 将时间转换为整数。

我更改了我的 admin.py,如下所述: 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')

Duration 在 modles.py 中定义为 TimeField:

class Action (models.Model):

    duration = models.TimeField() 

有人知道如何更改 MyChangeList 中的 aggregate() 函数吗? 我想我必须将时间值更改为浮点数或整数,求和然后将其转换回来。

有什么建议吗?

非常感谢。

【问题讨论】:

    标签: python django time django-admin sum


    【解决方案1】:

    我想你正在使用 MySQL。它有一个old bug 总结时间(我不知道它现在是否已修复)。

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

    【讨论】:

    • 我正在使用 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']) 现在可以使用了 ;-)
    猜你喜欢
    • 1970-01-01
    • 2019-04-15
    • 2013-03-01
    • 2011-11-08
    • 2014-10-15
    • 2012-09-19
    • 2011-01-27
    • 2011-09-26
    • 2011-12-24
    相关资源
    最近更新 更多