FastAdmin未记录类模型注册,继承fastapi-users的User模型登录后台报错‘User model is not registered’
FastAdmin未记录类模型注册,继承fastapi-users的User模型登录后台报错‘User model is not registered’
嘿,我之前也踩过这个坑!你这情况大概率是FastAdmin没正确识别到你的User模型,咱们一步步排查解决:
- 先盯紧装饰器的导入和用法!别搞混了不同库的
register装饰器,一定要用FastAdmin提供的那个,导入语句得是from fastadmin import register,要是不小心导入了fastapi-users或者其他库的register,那肯定白忙活。另外,你代码里写的@register(User, sqlalchemy_sessionmaker=db...)是错的!装饰器不用手动传类名,直接把它放在类定义的上方,参数只传数据库会话生成器就行,正确写法是这样:from core.models import Base from fastapi_users.db import SQLAlchemyBaseUserTable from .mixins import IntIdPkMixin, CompanyRelationMixin from core.types.user_id import UserIdType from fastadmin import register # 确保是FastAdmin的register @register(sqlalchemy_sessionmaker=你的db会话生成器) class User( Base, IntIdPkMixin, CompanyRelationMixin, SQLAlchemyBaseUserTable[UserIdType], ): # 你的模型字段定义 ... - 再检查模型模块有没有被正确导入!要是你的User模型在单独的文件里(比如
models/user.py),那在初始化FastAdmin的入口文件(比如main.py)里必须导入这个模块,不然装饰器根本没机会执行,FastAdmin自然不知道有这个模型存在。就加一行from your_app.models.user import User就行,不用额外操作,导入后装饰器会自动完成注册。 - 最后确认Base类的一致性!你的User模型同时继承了core.models的Base和fastapi-users的SQLAlchemyBaseUserTable,要确保这两个Base是同一个SQLAlchemy的Base类,不然可能会出现表结构不兼容的问题,间接导致FastAdmin识别失败。
要是这么调整完还不行,你可以看看FastAdmin的运行日志,有没有模型注册相关的提示,或者检查下数据库里User表的结构是不是符合FastAdmin的要求——不过一般前面几步就能解决这个“模型未注册”的问题了。
内容来源于stack exchange
相关产品推荐
相关产品推荐

