I use FastAPI version 0.87.0
And I need
- define validation function which is can access multiple field at once. like this
if name is None and number is None
- So I use
root_validator
- So I use
- raise custom Exception from null request, not Pydantic Error (
1 validation error for Request\nquery -> ...
)- So I use
root_validator(pre=True)
- So I use
- And Swagger UI display it
required
- So I can not define like this
Query(None)
, it must beQuery(...)
- So I can not define like this
- And it defined with custom alias field name, and description.
- so I use
Query
,Body
from FastAPI.
- so I use
@router.get("/foo")
async def foo(req: FooReq):
...
class FooReq(BaseModel):
required_field: str = Query(..., alias='requiredField', description='description')
not_required_field: int | None = Query(None, alias='notRequiredField', description='description')
@root_validator(pre=True):
def my_validation(cls, values):
if values.get('requiredField') is None:
raise CustomException
case 1
raise CustomException fine. but Swagger display not required
required_field: str = Query(None, alias='requiredField', description='description')
required_field: str | None = Query(None, alias='requiredField', description='description')
case 2
the Swagger display required
fine, but it raise Pydantic Error
required_field: str = Query(..., alias='requiredField', description='description')
required_field: str | None = Query(..., alias='requiredField', description='description')
how to do that?
is there any other best practice handling validation with custom exception?