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

实现django-progressbarupload时遇TypeError:'MediaDefiningClass'对象不可迭代

解决django-progressbarupload集成时的TypeError: 'MediaDefiningClass' object is not iterable错误

这个错误的核心原因是你在Admin注册环节搞混了模型类和Admin配置类的关系,而且两者同名导致了变量覆盖。

问题分析

你从accounts.models导入了模型UserProfile,但紧接着又定义了一个同名的UserProfile(admin.ModelAdmin)类——这就导致后面调用admin.site.register(UserProfile)时,传入的其实是你定义的Admin配置类,而非真正的模型类。Django尝试遍历这个Admin类来处理模型逻辑,但Admin类的元类是MediaDefiningClass,它不支持迭代操作,所以抛出了这个错误。

修正后的代码

把Admin配置类重命名,并且注册时同时传入模型类和对应的Admin配置类:

from django.contrib import admin
from accounts.models import UserProfile

# 重命名Admin类,避免和模型类同名冲突
class UserProfileAdmin(admin.ModelAdmin):
    change_form_template = 'progressbarupload/change_form.html'
    add_form_template = 'progressbarupload/change_form.html'

# 正确注册:第一个参数是模型类,第二个是对应的Admin配置类
admin.site.register(UserProfile, UserProfileAdmin)

关键说明

  • Django的admin.site.register()方法,第一个参数必须是模型类,第二个参数是可选的Admin配置类(用于自定义Admin页面行为)。
  • 永远不要让Admin配置类和模型类同名,这会导致变量覆盖,引发这类难以排查的低级错误。

内容的提问来源于stack exchange,提问作者Jason Howard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:47:16