django-admin sum multiple columns

snz8szmq  于 2023-06-25  发布在  Go
关注(0)|答案(2)|浏览(97)

我有一个包含多个字段的模型。我想在django-admin(list_display)中添加另一个字段,它是所有字段的总和。

型号

class Model1(models.Model):
    field1 = models.DecimalField(blank=True,null=True,decimal_places=2,max_digits=8)
    field2 = models.DecimalField(blank=True,null=True,decimal_places=2,max_digits=8)
    field3 = models.DecimalField(blank=True,null=True,decimal_places=2,max_digits=8)
    field3 = models.DecimalField(blank=True,null=True,decimal_places=2,max_digits=8)
    field4 = models.DecimalField(blank=True,null=True,decimal_places=2,max_digits=8)

    def __str__(self):
        return str(self.id)

模特管理员

class Model1Admin(admin.ModelAdmin):
    model = Model1

    list_display = ('field1','field2',<!--Sum of (field1,field2,field3,field4,field5-->)

admin.site.register(Modell,Model1Admin)

我使用的是Django的最新版本。

rdlzhqv9

rdlzhqv91#

来自Django admin docs关于list_display
有四种类型的值可以在list_display中使用:
....
接受一个参数的可调用对象,即模型示例。例如:

def upper_case_name(obj):
    return ("%s %s" % (obj.first_name, obj.last_name)).upper()
upper_case_name.short_description = 'Name'

class PersonAdmin(admin.ModelAdmin):
    list_display = (upper_case_name,)

因此,在本例中,您可以创建如下方法

def field_sum(obj):
    attribute_list = [ 'field1','field2',...]
    return sum(getattr(obj, attribute) or 0 for attribute in attribute_list)

field_sum.short_description = 'Field sum'
bpsygsoo

bpsygsoo2#

如果你愿意,你可以这样做:
1-在模型中创建特性:

class Model1(models.Model):
    field1 = models.DecimalField(blank=True,null=True,decimal_places=2,max_digits=8)
    field2 = models.DecimalField(blank=True,null=True,decimal_places=2,max_digits=8)
    field3 = models.DecimalField(blank=True,null=True,decimal_places=2,max_digits=8)
    field3 = models.DecimalField(blank=True,null=True,decimal_places=2,max_digits=8)
    field4 = models.DecimalField(blank=True,null=True,decimal_places=2,max_digits=8)

    def __str__(self):
        return str(self.id)

    @property
    def final_sum(self):
        return self.field1 + self.field2 + self.field3 + self.field4 + self.field5

2-然后在您的www.example.com中使用它admin.py

class Model1Admin(admin.ModelAdmin):
    model = Model1

    list_display = ('final_sum', 'field1','field2', )

admin.site.register(Modell,Model1Admin)

相关问题