安装django-filer遇Admin.E039错误:需注册CustomUser的Admin类
解决django-filer与自定义CustomUser、AdminSite冲突的admin.E039错误
问题根源
django-filer的FolderAdmin和PermissionAdmin默认在autocomplete_fields中引用原生User模型,当你替换为CustomUser并自定义AdminSite后,这两个admin类无法找到已注册的CustomUser admin实例,因此触发admin.E039错误。
解决方案
1. 确保CustomUser注册到自定义AdminSite
在项目的admin.py中,使用你的自定义AdminSite实例注册CustomUser,而非默认的admin.site:
from django.contrib.auth.admin import UserAdmin from .models import CustomUser from .admin_site import MyAdminSite # 你的自定义AdminSite类 admin_site = MyAdminSite(name='custom_admin') # 注册CustomUser和对应的UserAdmin admin_site.register(CustomUser, UserAdmin)
2. 重写django-filer的Admin类,替换关联模型
自定义FolderAdmin和PermissionAdmin,将其中autocomplete_fields关联的用户模型替换为CustomUser,再注册到你的AdminSite:
from filer.admin.folderadmin import FolderAdmin from filer.models import Folder from filer.admin.permissionadmin import PermissionAdmin from filer.models import Permission from .admin_site import MyAdminSite admin_site = MyAdminSite(name='custom_admin') # 自定义FolderAdmin,确保autocomplete_fields指向CustomUser class CustomFolderAdmin(FolderAdmin): autocomplete_fields = ('owner', 'parent') # 自定义PermissionAdmin class CustomPermissionAdmin(PermissionAdmin): autocomplete_fields = ('user', 'group') # 先取消django-filer默认的注册,再注册自定义Admin类 if Folder in admin_site._registry: admin_site.unregister(Folder) admin_site.register(Folder, CustomFolderAdmin) if Permission in admin_site._registry: admin_site.unregister(Permission) admin_site.register(Permission, CustomPermissionAdmin)
3. 确认AUTH_USER_MODEL配置
在settings.py中确保已正确指定自定义用户模型:
AUTH_USER_MODEL = "your_app_name.CustomUser"
4. 配置urls.py使用自定义AdminSite
在项目根urls.py中,替换默认admin路由为你的自定义AdminSite:
from .admin_site import admin_site urlpatterns = [ path('admin/', admin_site.urls), # 其他路由配置... ]
5. 清除缓存并重启服务
执行以下命令清除Django缓存,再重启开发服务器:
python manage.py clearcache python manage.py runserver
内容的提问来源于stack exchange,提问作者Dixan
相关产品推荐
相关产品推荐

