Search code examples
djangodjango-modelsdjango-admin

django-admin sum multiple columns


I have a model with several fields. And I wanted to add another field in django-admin (list_display), where it is the sum of all fields.

Model's

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)

Model's Admin

class Model1Admin(admin.ModelAdmin):
    model = Model1

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

admin.site.register(Modell,Model1Admin)

i am using the last version of django.


Solution

  • if you want you can do something like that:

    1- Create a property in your model:

    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- Then use it in your admin.py

    class Model1Admin(admin.ModelAdmin):
        model = Model1
    
        list_display = ('final_sum', 'field1','field2', )
    
    admin.site.register(Modell,Model1Admin)