直到Django 1.8.x我在admin.py
文件中有这个代码:
class MyClassAdmin(admin.ModelAdmin):
...
list_display = ('field1', 'field2', 'field3')
def __init__(self, *args, **kwargs):
super(MyClassAdmin, self).__init__(*args, **kwargs)
self.list_display_links = (None, )
这意味着当用户打开它时,禁用模型行上的链接。我需要这个,因为这是指一个只读表,我不希望用户甚至能够编辑条目。
最近,我升级到Django 1.9.2,此代码目前返回错误:
django.core.management.base.SystemCheckError:SystemCheckError:System 检查确定了一些问题:
错误::(admin.E111)的值 'list_display_links [0]'指'None',未定义 'list_display'。
根据Django docs,这是:
admin.E111:list_display_links [n]的值是指,在list_display中未定义。
这是非常模糊的,并没有解释如何处理None
等非字符串值。
如何修改这段代码,以便覆盖list_display_links
函数中的__init__
属性?
答案 0 :(得分:3)
list_display_links
的文档说如果您不想显示任何链接,请使用None
。你正在返回一个元组,这意味着Django希望元组中的每个项都是list_display
中的一个字段。由于None
不是字段,因此您会从检查框架中收到错误。
另外,建议不要在模型管理员的self.list_display_links
方法中设置__init__
。最好在课堂上设置list_display_links
。
class MyClassAdmin(admin.ModelAdmin):
...
list_display = ('field1', 'field2', 'field3')
list_display_links = None
或者,如果您需要动态更改它,请覆盖get_list_display_links
。
class MyClassAdmin(admin.ModelAdmin):
...
list_display = ('field1', 'field2', 'field3')
def get_list_display_links(request, list_display):
if condition():
return None
else:
return list_display