Unprocessable entity error when sending a form data in fastapi

Viewed 40

When I send a multi-part form data it returns the error: "Unprocessable Entity"

the api endpoint:

@router.post('/', response_model=schemas.Category)
def add_category(
                 file: UploadFile,
                 category: schemas.CategoryCreate = Depends(schemas.CategoryCreate.as_form), 
                 db: Session = Depends(get_db)
                ):
print(category)
print(file.filename)

The BaseModel classes:

class ProductCreate(BaseModel):
title: str 
description: str 
price: float 
time: float 
photo_url: str 

@as_form
class CategoryCreate(BaseModel):
name: str
products: List[ProductCreate] = []

the as_form function:

def as_form(cls: Type[BaseModel]):
new_parameters = []

for field_name, model_field in cls.__fields__.items():
    model_field: ModelField  # type: ignore

    new_parameters.append(
         inspect.Parameter(
             model_field.alias,
             inspect.Parameter.POSITIONAL_ONLY,
             default=Form(...) if not model_field.required else Form(model_field.default),
             annotation=model_field.outer_type_,
         )
     )

async def as_form_func(**data):
    return cls(**data)

sig = inspect.signature(as_form_func)
sig = sig.replace(parameters=new_parameters)
as_form_func.__signature__ = sig  # type: ignore
setattr(cls, 'as_form', as_form_func)
return cls

note : When I remove the field: products: List[ProductCreate] = [] from CategoryCreate BaseModel, it works fine!

Thank you in advance

0 Answers
Related