如何覆盖Django管理列表显示中的现有列?

时间:2017-05-23 12:35:56

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

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

我的模型的字段response_bytes位于list_display的{​​{1}}中。 我希望管理员以MB或KB等显示此值。

MyModelAdmin

不幸的是,它并没有调用以下方法。如果我使用自定义名称创建了新的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) 项,然后重命名这些方法,那么它将起作用。

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

1 个答案:

答案 0 :(得分:0)

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

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', ...)

代码未经测试,但与此相关的内容应该有效