直到 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 check identified some issues:
ERRORS: <class 'myapp.admin.MyClassAdmin'>: (admin.E111) The value of 'list_display_links[0]' refers to 'None', which is not defined in 'list_display'.
根据 Django docs ,这是:
admin.E111: The value of list_display_links[n] refers to , which is not defined in list_display.
这非常模糊,并且没有解释如何处理非字符串值,例如 None
。
如何修改这段代码,以便覆盖 __init__
函数中的 list_display_links
属性?
最佳答案
list_display_links
的文档如果您不想显示任何链接,则应该使用 None
。您正在返回一个元组,这意味着 Django 希望元组中的每个项目都是 list_display
中的一个字段。由于 None
不是字段,因此您会从检查框架中收到错误。
顺便说一句,不建议在模型管理的 __init__
方法中设置 self.list_display_links
。最好在类上设置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
关于python - 如何避免 Django 1.9.2 中的 admin.E111 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35184004/