You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 01:53:21