Django 管理聚合

Django admin aggregation

我正在使用Django来管理存款,但是我发现了一个问题,有一个medel看起来像:

class Deposit(models.Model):
      user = models.ForeignKey(User) 
      money_re = models.DecimalField(max_digits=11, decimal_places=2)
      ...

我想在页面右下角的管理change_list页面添加模型中money_re的总和

有没有办法在管理change_list页面中使用模型聚合

欢迎任何有用的建议!

覆盖 ModelAdmin.changelist_view() 并用所需数据填充上下文:

from django.db.models import Sum

class DepositAdmin(admin.ModelAdmin):

    def changelist_view(self, request, extra_context=None):
        aggregates = Deposit.objects.aggregate(Sum('money_re'))
        context = {'total_deposit': aggregates['money_re__sum']}
        if extra_context:
            context.update(extra_context)
        return super(DepositAdmin, self).changelist_view(request, context)

然后创建模板 admin/<appname>/deposit/change_list.html 并在结果列表后显示此数据:

{% extends 'admin/change_list.html' %}

{% block result_list %}

    {{ block.super }}

    <div style="text-align: right; padding: 10px">
        Total deposit: <b>{{ total_deposit }}</b>
    </div>

{% endblock %}