优化Django Admin时遇Block模型已注册错误,如何解决?
解决Django Admin模型重复注册的问题
这个错误很典型——你已经通过admin.site.register(Block)把Block模型注册过一次了,之后又尝试用自定义的BlockAdmin配置再次注册同一个模型,Django的Admin站点不允许重复注册同一个模型,所以抛出了AlreadyRegistered异常。
这里有两种靠谱的解决方法,根据你的实际情况选择:
方法一:直接移除重复的注册语句(推荐)
如果两次注册都是在你自己能修改的代码里,最简单的方式就是删掉第一次的admin.site.register(Block),只保留带自定义配置的注册代码。修改后的代码应该是这样:
from django.contrib import admin from .models import Block class BlockAdmin(admin.ModelAdmin): list_display = ('name', 'desc', 'admin') # 只保留这一行注册语句 admin.site.register(Block, BlockAdmin)
这种方式最简洁,也不会有额外的判断逻辑,是优先推荐的方案。
方法二:先撤销已注册的模型,再重新注册
如果第一次的注册代码不在你的可控范围内(比如来自第三方app、其他模块的自动注册),那可以先检查模型是否已注册,若是则撤销注册,再重新注册带自定义配置的版本:
from django.contrib import admin from .models import Block # 先判断模型是否已注册,避免触发未注册的错误 if admin.site.is_registered(Block): admin.site.unregister(Block) # 注册带自定义配置的模型 class BlockAdmin(admin.ModelAdmin): list_display = ('name', 'desc', 'admin') admin.site.register(Block, BlockAdmin)
admin.site.unregister()方法可以移除已注册的模型,配合is_registered()的判断能确保代码不会因为模型未注册而报错。
内容的提问来源于stack exchange,提问作者Wizard
相关产品推荐
相关产品推荐

