mirror of https://github.com/tiangolo/fastapi.git
Allow to have multiple Query parameter models
This commit is contained in:
parent
1cfea408c0
commit
d8d097deab
|
|
@ -212,11 +212,15 @@ def get_flat_dependant(
|
||||||
def _get_flat_fields_from_params(fields: List[ModelField]) -> List[ModelField]:
|
def _get_flat_fields_from_params(fields: List[ModelField]) -> List[ModelField]:
|
||||||
if not fields:
|
if not fields:
|
||||||
return fields
|
return fields
|
||||||
first_field = fields[0]
|
|
||||||
if len(fields) == 1 and lenient_issubclass(first_field.type_, BaseModel):
|
fields_to_extract = []
|
||||||
fields_to_extract = get_cached_model_fields(first_field.type_)
|
for f in fields:
|
||||||
return fields_to_extract
|
if lenient_issubclass(f.type_, BaseModel):
|
||||||
return fields
|
fields_to_extract.extend(get_cached_model_fields(f.type_))
|
||||||
|
else:
|
||||||
|
fields_to_extract.append(f)
|
||||||
|
return fields_to_extract
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def get_flat_params(dependant: Dependant) -> List[ModelField]:
|
def get_flat_params(dependant: Dependant) -> List[ModelField]:
|
||||||
|
|
@ -747,15 +751,15 @@ def request_params_to_args(
|
||||||
if not fields:
|
if not fields:
|
||||||
return values, errors
|
return values, errors
|
||||||
|
|
||||||
first_field = fields[0]
|
|
||||||
fields_to_extract = fields
|
fields_to_extract = fields
|
||||||
single_not_embedded_field = False
|
|
||||||
if len(fields) == 1 and lenient_issubclass(first_field.type_, BaseModel):
|
|
||||||
fields_to_extract = get_cached_model_fields(first_field.type_)
|
|
||||||
single_not_embedded_field = True
|
|
||||||
|
|
||||||
params_to_process: Dict[str, Any] = {}
|
params_to_process: Dict[str, Any] = {}
|
||||||
|
|
||||||
|
model_fields = [field for field in fields if lenient_issubclass(field.type_, BaseModel)]
|
||||||
|
if model_fields:
|
||||||
|
fields_to_extract = [
|
||||||
|
cached_field for field in fields for cached_field in get_cached_model_fields(field.type_)
|
||||||
|
]
|
||||||
|
|
||||||
processed_keys = set()
|
processed_keys = set()
|
||||||
|
|
||||||
for field in fields_to_extract:
|
for field in fields_to_extract:
|
||||||
|
|
@ -780,27 +784,24 @@ def request_params_to_args(
|
||||||
if key not in processed_keys:
|
if key not in processed_keys:
|
||||||
params_to_process[key] = value
|
params_to_process[key] = value
|
||||||
|
|
||||||
if single_not_embedded_field:
|
|
||||||
field_info = first_field.field_info
|
|
||||||
assert isinstance(
|
|
||||||
field_info, params.Param
|
|
||||||
), "Params must be subclasses of Param"
|
|
||||||
loc: Tuple[str, ...] = (field_info.in_.value,)
|
|
||||||
v_, errors_ = _validate_value_with_model_field(
|
|
||||||
field=first_field, value=params_to_process, values=values, loc=loc
|
|
||||||
)
|
|
||||||
return {first_field.name: v_}, errors_
|
|
||||||
|
|
||||||
for field in fields:
|
for field in fields:
|
||||||
value = _get_multidict_value(field, received_params)
|
|
||||||
field_info = field.field_info
|
field_info = field.field_info
|
||||||
assert isinstance(
|
assert isinstance(
|
||||||
field_info, params.Param
|
field_info, params.Param
|
||||||
), "Params must be subclasses of Param"
|
), "Params must be subclasses of Param"
|
||||||
loc = (field_info.in_.value, field.alias)
|
|
||||||
v_, errors_ = _validate_value_with_model_field(
|
if lenient_issubclass(field.type_, BaseModel):
|
||||||
field=field, value=value, values=values, loc=loc
|
loc: Tuple[str, ...] = (field_info.in_.value,)
|
||||||
)
|
v_, errors_ = _validate_value_with_model_field(
|
||||||
|
field=field, value=params_to_process, values=values, loc=loc
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
value = _get_multidict_value(field, received_params)
|
||||||
|
loc = (field_info.in_.value, field.alias)
|
||||||
|
v_, errors_ = _validate_value_with_model_field(
|
||||||
|
field=field, value=value, values=values, loc=loc
|
||||||
|
)
|
||||||
|
|
||||||
if errors_:
|
if errors_:
|
||||||
errors.extend(errors_)
|
errors.extend(errors_)
|
||||||
else:
|
else:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue