【问题标题】:How to override existing column in Django admin list display?如何覆盖 Django 管理列表显示中的现有列?
【发布时间】:2017-10-23 10:05:32
【问题描述】:

我试图弄清楚如何覆盖 Django 管理列表显示中的列值。

我的模型有字段response_bytes,在list_displayMyModelAdmin。 我希望管理员以 MB 或 KB 等显示此值。

class MyModelAdmin(admin.ModelAdmin):
    list_display = [f.name for f in MyModel._meta.fields] # This contains response_bytes

    def response_bytes(self,obj):
        return filesize.size(obj.response_bytes)

    def request_bytes(self,obj):
        return filesize.size(obj.request_bytes)

不幸的是它没有调用下面的方法。如果我使用自定义名称创建新的list_display 项目,然后重命名这些方法,它会起作用。

我可以覆盖现有字段还是必须定义新列?

【问题讨论】:

    标签: python django python-2.7 django-admin django-1.10


    【解决方案1】:

    你为什么不这样做而不是覆盖列

    class MyModeL(models.Model):
        filesize = model.ACertainFieldIAmUsing( ...
    
        @property
        def change_bytes(self):
            if float(self.filesize) / 1048576 > 1:
                return "%s MB" % (float(self.filesize) / 1048576)
            elif float(self.filesize) / 1024 > 1:
                return "%s KB" % (float(self.filesize) / 1024)
            else:
                return "%s B" % (self.filesize)
    

    然后在您的模型管理员中。

    class MyModelAdmin(admin.ModelAdmin):
        list_display = ('change_bytes', ...)
    

    代码未经测试,但接近这个的东西应该可以工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-12
      • 2014-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多