era*_*zer 8 python pydantic fastapi
似乎 pydantic 不允许将基本参数和配置参数传递给 create_model 函数,以避免混淆。
我试图做的是:
from pydantic import BaseModel, create_model
class Config:
orm_mode = True
E = create_model('E', name='name', __base__=BaseModel)
B = create_model('B', age=1, __base__=E, __config__=Config)
Run Code Online (Sandbox Code Playgroud)
使用类这非常简单:
class E(BaseModel):
name = 'name'
class B(E):
age = 18
class Config:
orm_mode = True
Run Code Online (Sandbox Code Playgroud)
有没有办法使用 create_model 来做到这一点?
我查看了Pydantic 测试 - test_create_model.py 并发现了一个简单的测试,演示了如何一起使用 Config 和 Base:
def test_config_and_base():
with pytest.raises(errors.ConfigError):
create_model('FooModel', __config__=BaseModel.Config, __base__=BaseModel)
Run Code Online (Sandbox Code Playgroud)
还有其他测试演示如何将 Config 类与 create_model() 一起使用
def test_custom_config():
class Config:
fields = {'foo': 'api-foo-field'}
model = create_model('FooModel', foo=(int, ...), __config__=Config)
assert model(**{'api-foo-field': '987'}).foo == 987
assert issubclass(model.__config__, BaseModel.Config)
with pytest.raises(ValidationError):
model(foo=654)
def test_custom_config_inherits():
class Config(BaseModel.Config):
fields = {'foo': 'api-foo-field'}
model = create_model('FooModel', foo=(int, ...), __config__=Config)
assert model(**{'api-foo-field': '987'}).foo == 987
assert issubclass(model.__config__, BaseModel.Config)
with pytest.raises(ValidationError):
model(foo=654)
def test_custom_config_extras():
class Config(BaseModel.Config):
extra = Extra.forbid
model = create_model('FooModel', foo=(int, ...), __config__=Config)
assert model(foo=654)
with pytest.raises(ValidationError):
model(bar=654)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2695 次 |
| 最近记录: |