我有两个Pydantic模型(< code>var1和< code>var2)。< code>PostExample方法的输入可以接收第一个模型或第二个模型的数据。使用< code>Union有助于解决这个问题,但是在验证期间,它会对第一个和第二个模型都抛出错误。
如何使其在填写字段时发生错误时,仅为某个模型返回验证器错误,而不是同时为两个模型返回?(如果有帮助,可以通过字段A的长度来区分模型)。
main.py
@app.post("/PostExample")
def postExample(request: Union[schemas.var1, schemas.var2]):
result = post_registration_request.requsest_response()
return result
架构.py
class var1(BaseModel):
A: str
B: int
C: str
D: str
class var2(BaseModel):
A: str
E: int
F: str
您可以使用受歧视的工会(感谢@larsks在评论中提及这一点)。设置一个可区分的联合,“验证更快,因为它只针对一个模型尝试”,以及“在失败的情况下只引发一个显式错误”。工作示例如下:
app.py
import schemas
from fastapi import FastAPI, Body
from typing import Union
app = FastAPI()
@app.post("/")
def submit(item: Union[schemas.Model1, schemas.Model2] = Body(..., discriminator='model_type')):
return item
架构.py
from typing import Literal
from pydantic import BaseModel
class Model1(BaseModel):
model_type: Literal['m1']
A: str
B: int
C: str
D: str
class Model2(BaseModel):
model_type: Literal['m2']
A: str
E: int
F: str
测试输入-输出
#1 Successful Response #2 Validation error #3 Validation error
# Request body # Request body # Request body
{ { {
"model_type": "m1", "model_type": "m1", "model_type": "m2",
"A": "string", "A": "string", "A": "string",
"B": 0, "C": "string", "C": "string",
"C": "string", "D": "string" "D": "string"
"D": "string" } }
}
# Server response # Server response # Server response
200 { {
"detail": [ "detail": [
{ {
"loc": [ "loc": [
"body", "body",
"Model1", "Model2",
"B" "E"
], ],
"msg": "field required", "msg": "field required",
"type": "value_error.missing" "type": "value_error.missing"
} },
] {
} "loc": [
"body",
"Model2",
"F"
],
"msg": "field required",
"type": "value_error.missing"
}
]
}
另一种方法是尝试解析模型(基于您作为查询/路径参数传递的鉴别器),如此处所述(更新 1)。
我正在尝试使用elasticsearch搜索产品。例如,如果产品是汽车,它将有一些字段,如“颜色”,“品牌”,“型号”,“公里”,……如果它是衣服,它将只有“颜色”,“尺寸”,……我想在弹性索引所有这些信息,以便能够搜索公里在aaa公里和bbb公里之间的汽车,和/或xxxx型号,相同的衣服或任何其他产品。 如何在elasticsearch中创建这样的字段?我希望所有的产品在相同的索引,这样用户可以
问题内容: 我想知道模式草案03是否可行。我已经在其他地方使用了依赖项,我认为可能需要创造性地使用它们,以便使用它们来指定某些字段的属性。 我目前的最佳尝试(无效)将使您对我的追求有所了解。我想要一个默认值,当另一个字段具有特定值时是可选值。 问题答案: 草案的第3版绝对可以做到这一点。由于您具有允许的国家/地区的完整列表,因此您可以执行以下操作: 因此,您实际上为架构定义了两种子类型,一种用于需
问题内容: 我一直努力在flask-admin中实现的一个功能是,当用户编辑表单时,一旦设置了字段1,便会约束字段2的值。 让我用语言给出一个简化的示例(实际用例更加复杂)。然后,我将展示实现该示例的完整要点,减去“约束”功能。 假设我们有一个数据库,该数据库跟踪一些软件“配方”以输出各种格式的报表。我们的示例数据库的表有两个配方:“严重报告”,“ ASCII艺术”。 为了实现每种配方,我们从几种
我有一个使用Java和Gson运行的rest API,并有一项任务来标准化字段的名称。不幸的是,它们是用我的母语创建的,现在需要改成英语。我在想,我可以支持旧版本,传递旧的字段名。 是否可以将@Since注释与@SerializedName一起使用?或者根据版本动态更改字段名的任何解决方案?
问题内容: 示例: File.txt的内容: 当使用’sort -k 1,1 File.txt’时,行的顺序不会改变,尽管我们期望: 如何根据绝对 数值 对包含数字的字段进行排序? 问题答案: 看看手册页进行排序 … 所以这是一个例子…
问题内容: 我有一张桌子叫: 每个都与一个不同的表相关,field的值指定了我要用于该表的表的名称。所有目标表都有几个相似的列: 当前,我正在使用此查询来选择通知,通知它们在目标表中存在相关行,并且其字段为: 但是由于它是a ,如果它与任何表都不匹配,它将返回通知,我该如何重写它,以便它不返回与目标表中的任何行都不匹配的通知?我也尝试了不成功的声明。 问题答案: 我不是100%肯定语法正确,并且现