如何避免Django 1.9.2中的admin.E111错误?

时间:2016-02-03 17:42:22

标签: python django django-admin

直到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__属性?

1 个答案:

答案 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