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

标签 python django hyperlink django-admin nonetype

直到 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/

相关文章:

python - Flask 开发服务器中静态文件的 URL 路由冲突

python - 如何在Python中通过将值与另一个数组进行比较来从一个数组返回值?

sql - Django - SQL 批量 get_or_create 可能吗?

django 动态过滤 q 个对象

html - 与帖子来源的最佳超链接关系

r - 将一列文本 URL 转换为 Shiny 中的事件超链接

python - 使用 CSS 选择器查找某些 <div> 标签时遇到问题

python - 不知道如何使用distinct() django

javascript - 需要从我的网站上删除图像/链接

python - 如何在 Python 中动态获取 Firefox 配置文件路径?