重载changelist_view并调用super()会导致属性错误。
我正在创建一个超级基本的仪表板,并且覆盖了ModelAdmin类的changelist_view方法。但是,此替代导致错误“ NoneType对象没有属性'has_header'”。但是,我实际上不做任何事情,而是覆盖changelist_view并调用超类-我尚未进行任何更改。
在admin.py
中class SummaryAdmin(admin.ModelAdmin):
def changelist_view(self, request, extra_context=None):
response = super().changelist_view(request, extra_context)
models.py中的相应模型
class Summary(Failure):
class Meta:
proxy = True
verbose_name = 'Failure Summary'
verbose_name_plural = 'Failures Summary'
这实际上是admin模型的全部内容。当我尝试转到django管理面板时,出现属性错误。据我所知,这与完全不覆盖changelist_view没什么不同,但是如果我删除覆盖,一切正常。
更新:我从字面上是从options.py复制了changelist_view代码,而不是调用超类,并且没有收到此错误,所以我怀疑这与我如何调用超类有关。
答案 0 :(得分:2)
以上代码的问题是它缺少return语句。 changelist_view返回一个响应,不返回的重载将导致各种错误。如果您习惯了如果您忘记了返回值或与指定类型不匹配的语言将无法编译的语言,这是一个容易犯的错误。