【问题标题】:django-admin sum multiple columnsdjango-admin 对多列求和
【发布时间】:2020-06-12 12:30:55
【问题描述】:

我有一个包含多个字段的模型。我想在 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。

【问题讨论】:

  • 到现在为止你尝试了什么
  • 我正在尝试使用查询集对管理文件执行 def 以返回我想要的值,但直到现在,什么都没有

标签: django django-models django-admin


【解决方案1】:

来自 Django 管理文档,关于 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'

【讨论】:

  • 给出错误“field_sum() 需要 1 个位置参数,但给出了 2 个”,但我在 def 上添加了 'self',它已经在工作了。谢谢
  • 在我的情况下返回给我的价值是数千欧元,呈现像 xxx xxx,xx 这样的结果的最佳策略是什么?
  • 这是后续问题,如果您在新问题后没有找到答案,请进行研究 -> meta.stackoverflow.com/questions/266767/…
猜你喜欢
  • 2015-11-08
  • 2015-08-28
  • 2016-02-23
  • 1970-01-01
  • 1970-01-01
  • 2012-10-20
  • 2016-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多