python - django-admin:添加额外的总计行

标签 python django django-admin django-views django-1.2

我正在使用标准的 django 管理模块来显示行列表。其中一列是数字字段。我想显示一个额外的“总计”行,其中大部分列为空白,除了数字列,它应该是所有对象的总数。

在管理模块中是否有一种简单的方法可以做到这一点,或者我最好为它制作一个自定义 View ?

我正在使用 Django 1.2。

最佳答案

是的,您可以通过多种方式做到这一点,但大多数 django-ist 的做法是:

首先覆盖默认的django ListView ...并给出一个新的模板文件目录

ModelAdmin.changelist_view(self, request, extra_context=None)

喜欢:

class MyModelAdmin(admin.ModelAdmin):

    # A template for a very customized change view:
    change_list_template = 'admin/myapp/extras/sometemplate_change_form.html'

    def get_total(self):
        #functions to calculate whatever you want...
        total = YourModel.objects.all().aggregate(tot=Sum('total'))['tot']
        return total

    def changelist_view(self, request, extra_context=None):
        my_context = {
            'total': self.get_total(),
        }
        return super(MyModelAdmin, self).changelist_view(request,
            extra_context=my_context)

因此,您将 ListView 上下文添加为“总计”,以保留您的总值(value)并将其传递给模板。

如果 change_list_template 将设置,django 使用该模板,否则,它使用标准 django 模板。

如果 def changelist_view(self, request, extra_context=None) 被调用,django 使用该函数创建内容,否则使用默认 django View 。

然后创建一个 admin/myapp/extras/sometemplate_change_form.html 文件并将您的 {{total}} 放在您想要的任何位置。

如何使用 override admin templates 的指南 这里是如何 override admin views

更新:我添加了一个简单的 aggregate 来计算总数。您可以对其进行编辑以根据需要进行设置。

更新 2:ModelAdmin 模板覆盖选项从 ModelAdmin.change_form_template 固定为 ModelAdmin.change_list_template。 (谢谢你 c4urself)。是的,但是更改默认的 django 管理模板是一个非常糟糕的选择,因为它被许多其他 ModelAdmin 使用,并且如果更新相关模板可能会导致问题。



注意:
使用过滤器时,总数不会改变,请参阅下面的评论。

关于python - django-admin:添加额外的总计行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8541956/

相关文章:

python - DateTimeField 不显示在管理系统中

python - 没有初始数据的 Django 表单集

python - geodjango 从原始 SQL 返回 geojson

python - 在定义类之前创建类的实例?

python - Scrapy安装: no acceptable C compiler found in $PATH

django - "django-admin startapp"有什么魔力,测试运行器需要找到我的 tests.py

python - Django 中的图像字段

django - 使用自定义用户模型在管理员中添加员工用户权限

Python密码程序

python - 如何在 Django 中为用户授予单个 session 额外权限