我试图弄清楚如何在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)
项,然后重命名这些方法,那么它将起作用。
我可以覆盖现有字段,还是必须定义新列?
答案 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', ...)
代码未经测试,但与此相关的内容应该有效