Django自动注册模型报错:Group已在auth应用中注册
Django Admin自动注册模型报错解决办法
问题场景
在admin.py中编写自动注册所有模型的代码,添加了AlreadyRegistered异常捕获,但仍报错提示Group模型已在auth应用中注册:
代码示例
from django.contrib import admin from django.apps import apps models = apps.get_models() for model in models: try: admin.site.register(model) except admin.sites.AlreadyRegistered: pass
报错信息
raise AlreadyRegistered(msg)
django.contrib.admin.sites.AlreadyRegistered: The model Group is already registered in app 'auth'.
原因分析
apps.get_models()会返回所有已安装应用的模型,包括Django自带auth应用的Group、User等模型,这些模型默认已经在Admin后台注册过了。同时代码中捕获异常的路径admin.sites.AlreadyRegistered,可能和实际抛出的异常类存在匹配偏差。
解决办法
办法1:只注册当前应用的模型(推荐)
无需处理其他应用的模型,只遍历并注册当前app下的所有模型,从根源避免冲突:
from django.contrib import admin from django.apps import apps # 替换成你自己的应用名称,比如"blog"、"store" current_app = apps.get_app_config("你的应用名称") models = current_app.get_models() for model in models: try: admin.site.register(model) except admin.AlreadyRegistered: pass
办法2:修正异常捕获类
如果确实需要注册所有应用的模型,修正异常捕获的类路径,确保能正确捕获已注册异常:
from django.contrib import admin from django.apps import apps models = apps.get_models() for model in models: try: admin.site.register(model) except admin.AlreadyRegistered: pass
内容的提问来源于stack exchange,提问作者user21251189
相关产品推荐
相关产品推荐

