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

我使用标准的django管理模块来显示行列表。其中一列是数值字段。我想显示一个额外的“总计”行,其中大多数列为空,除了数字列,该列应该是所有对象的总计。
在管理模块中是否有一个简单的方法来实现这一点,或者我最好为它创建一个自定义视图?
我用的是django 1.2。

最佳答案

是的,你可以用很多方法来做,但大多数的姜戈主义方法是:
首先重写默认的django列表视图…并给出一个新的模板文件目录

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)

因此,您可以将列表视图上下文添加为“总计”,以保留总值并将其传递给模板。
如果设置了“更改列表”模板,Django将使用该模板,否则将使用标准Django模板。
如果调用def changelist_view(self,request,extra_context=none),Django将使用该函数创建内容,否则将使用默认的Django视图。
然后创建一个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。(谢谢你,库塞尔)。是的,但是更改默认的django管理模板是一个非常糟糕的选择,因为它被许多其他的modeladmin使用,如果更新相关模板,可能会导致问题。
NB:
使用过滤器时,总数不会改变,请参阅下面的注释。

本文翻译自 https://stackoverflow.com/questions/8541956/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

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


相关文章:

python - 在散景条形图中选择条形顺序

python - Django查询获取不在其他对象中的对象

python - 如何在Django会话中存储查询集以进行分页

python - django管理员。以相同的形式与孩子一起创建父母

python - Django多步骤表单向导模型表单

python - 如何在应用程序退出时正确终止线程

python - Python M2Crypto SSL:无法获取本地发行者证书

python - 通过管理员创建新用户时出现NoReverseMatch错误

python - 树莓派2-无法安装scikit-image

python - 模板中的django forloopcounter