django 必须注册模型“CustomUser”的管理员,才能由FolderAdmin.autocomplete_fields引用

xdnvmnnf  于 2023-01-21  发布在  Go
关注(0)|答案(1)|浏览(139)

我正在尝试安装django-filer,在遵循安装文档(pip安装,添加到INSTALLED_APPS等)后,当我尝试运行我的开发服务器时,我在终端中得到以下错误...

ERRORS:
<class 'filer.admin.folderadmin.FolderAdmin'>: (admin.E039) An admin for model "CustomUser" has to be registered to be referenced by FolderAdmin.autocomplete_fields.
<class 'filer.admin.permissionadmin.PermissionAdmin'>: (admin.E039) An admin for model "CustomUser" has to be registered to be referenced by PermissionAdmin.autocomplete_fields.

如错误输出所示,我用CustomUser扩展了Django用户模型,我也扩展了AdminSite以在管理中获取自定义url,所以可能是扩展这些导致了错误,对此有什么可能的解决方案吗?
错误显示为an admin has to be registered,并且我注册了多个超级用户。

yzckvree

yzckvree1#

发生此错误的原因是filer应用程序尝试在其管理界面中使用CustomUser模型,但找不到该模型的注册管理员。要解决此问题,你需要为与filer应用程序兼容的CustomUser模型创建管理类。
为此,您可以将filer.admin.permissionadmin. PermissionAdminfiler.admin.folderadmin. FolderAdmin(而不是默认的admin.ModelAdmin类)子类化,然后将您的自定义管理员类注册到CustomUser模型。
例如,您可以在app目录中创建一个名为admin.py的文件,并添加以下代码:

from django.contrib import admin
from filer.admin.folderadmin import FolderAdmin
from myapp.models import CustomUser

class CustomUserAdmin(FolderAdmin):
    pass

admin.site.unregister(CustomUser)
admin.site.register(CustomUser, CustomUserAdmin)

此代码创建一个自定义管理类CustomUserAdmin(继承自filer.admin.folderadmin. FolderAdmin),然后使用admin.site.register()方法将其注册到CustomUser模型。
您还应该注意,对filer.admin.folderadmin. FolderAdmin进行子类化也需要对filer.admin.permissionadmin.PermissionAdmin进行子类化,因此您可能需要创建另一个继承自filer.admin.permissionadmin.PermissionAdmin的自定义管理类,并将其注册到CustomUser
下面是更新后的代码:

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from filer.admin.folderadmin import FolderAdmin
from myapp.models import CustomUser

class CustomUserAdmin(UserAdmin, FolderAdmin):
    pass

admin.site.unregister(CustomUser)
admin.site.register(CustomUser, CustomUserAdmin)

这段代码创建了一个继承自UserAdmin和FolderAdmin的自定义管理类CustomUserAdmin,然后将其注册到CustomUser模型。
如果遇到任何问题,您可能还需要对PermissionAdmin执行相同的操作

相关问题