Django 5自定义AdminSite报错:'generator' object is not subscriptable
问题修复:Django Admin自定义AdminSite触发TypeError
问题场景
自定义Django 5的AdminSite后,后台登录及点击模型列表均正常,但点击应用标签(如Routefilterfeeder)时,触发TypeError: 'generator' object is not subscriptable,错误回溯指向django/contrib/admin/sites.py的app_index视图,该视图尝试通过app_list[0]["name"]访问元素。
错误原因
AppAdminSite类的get_app_list方法中存在多余的yield app语句,导致函数返回生成器对象而非列表。Django的app_index视图需要列表类型的app_list来执行下标访问操作,生成器不支持下标操作,因此触发报错。
修复步骤
修改core/admin.py中的get_app_list方法,删除多余的yield app代码块:
原错误代码片段
for app_name in app_dict.keys(): app = app_dict[app_name] model_priority = { model['object_name']: getattr( site._registry[apps.get_model(app_name, model['object_name'])], 'admin_site_priority', 9999 ) for model in app['models'] } app['models'].sort(key=lambda x: model_priority[x['object_name']]) yield app # 此行是错误根源
修复后代码片段
for app_name in app_dict.keys(): app = app_dict[app_name] model_priority = { model['object_name']: getattr( site._registry[apps.get_model(app_name, model['object_name'])], 'admin_site_priority', 9999 ) for model in app['models'] } app['models'].sort(key=lambda x: model_priority[x['object_name']]) # 删除yield app语句
验证
修改完成后重启Django服务,点击应用标签即可正常进入应用管理页面,模型排序逻辑也会正常生效。
内容的提问来源于stack exchange,提问作者Bino Oetomo
相关产品推荐
相关产品推荐

