3

我在我的项目中使用 Fastapi、Fastapi Users 和 TortoiseOrm 进行身份验证。

FastApi 用户

乌龟

我按照 FastApi 用户网站上的示例进行操作,当我尝试在注册用户处添加一些额外字段时,出现此错误:

RuntimeError:没有为 <class 'tortoise.fields.data.CharField'> 找到验证器,请参阅 Config 中的 optional_types_allowed

这是我的代码,感谢您的帮助!

from tortoise import fields
from tortoise.contrib.pydantic import pydantic_model_creator
from fastapi_users import models
from fastapi_users.db import TortoiseBaseUserModel, TortoiseUserDatabase
from tortoise.contrib.starlette import register_tortoise


class User(models.BaseUser):
 nombre = fields.CharField(max_length=100)
 apellidos = fields.CharField(max_length=100)


class UserCreate(models.BaseUserCreate):
  pass

class UserUpdate(User, models.BaseUserUpdate):
  pass

class UserDB(User, models.BaseUserDB):
  pass

class UserModel(TortoiseBaseUserModel):
  pass


 user_db = TortoiseUserDatabase(UserDB, UserModel)
4

3 回答 3

0

添加自定义属性:

from typing import Optional
from pydantic import Field

class User(models.BaseUser):
  nombre : Optional[str] = Field(max_lenght="100")
  apellidos :Optional[str] = Field(max_lenght="100")

要让这些字段 (nombreapellidos) 作为属性出现在路径函数中,您需要对fastapi_users库进行更改。

如果您使用的是虚拟环境,则有一个Lib文件夹包含已安装的库等。models.py在文件夹中查找Lib/fastapi_users文件。使用新属性更新文件,并在您用于项目的 db 文件中执行相同操作。

快乐计算!!

于 2021-02-08T19:07:01.203 回答
0

我在使用带有 SQLAlchemy 的 FastAPI 用户时遇到了类似的错误。对我有用的是在定义时将自定义字段(在您的情况下为 nombre 和 appelidos)添加到 4 个用户模型和 UserModel 表中的每一个中

schemas.py 文件

from fastapi_users import models

class User(models.BaseUser):
    sid: int
    fname: str
    lname: str
    
class UserCreate(models.BaseUserCreate):
    sid: int
    fname: str
    lname: str

class UserUpdate(User, models.BaseUserUpdate):
    sid: int
    fname: str
    lname: str
  
class UserDB(User, models.BaseUserDB):
    sid: int
    fname: str
    lname: str

模型.py 文件

from sqlalchemy import Column, Integer, String
from fastapi_users.db import SQLAlchemyBaseUserTable
from db import Base

class UserTable(Base, SQLAlchemyBaseUserTable):
    sid = Column(Integer)
    fname = Column(String)
    lname = Column(String)
于 2021-07-06T07:32:52.040 回答
0

这对我有用,它需要该字段的乌龟 ORM 格式:

class UserModel(TortoiseBaseUserModel):
    name = fields.CharField()
于 2021-09-16T22:34:05.140 回答