mirror of https://github.com/tiangolo/fastapi.git
🔒 Ensure `skip_defaults` doesn't cause extra fields to be serialized (#485)
This commit is contained in:
parent
f156f45193
commit
6c6bdb6233
|
|
@ -45,6 +45,8 @@ def serialize_response(
|
||||||
) -> Any:
|
) -> Any:
|
||||||
if field:
|
if field:
|
||||||
errors = []
|
errors = []
|
||||||
|
if skip_defaults and isinstance(response, BaseModel):
|
||||||
|
response = response.dict(skip_defaults=skip_defaults)
|
||||||
value, errors_ = field.validate(response, {}, loc=("response",))
|
value, errors_ = field.validate(response, {}, loc=("response",))
|
||||||
if isinstance(errors_, ErrorWrapper):
|
if isinstance(errors_, ErrorWrapper):
|
||||||
errors.append(errors_)
|
errors.append(errors_)
|
||||||
|
|
@ -52,8 +54,6 @@ def serialize_response(
|
||||||
errors.extend(errors_)
|
errors.extend(errors_)
|
||||||
if errors:
|
if errors:
|
||||||
raise ValidationError(errors)
|
raise ValidationError(errors)
|
||||||
if skip_defaults and isinstance(response, BaseModel):
|
|
||||||
value = response.dict(skip_defaults=skip_defaults)
|
|
||||||
return jsonable_encoder(
|
return jsonable_encoder(
|
||||||
value,
|
value,
|
||||||
include=include,
|
include=include,
|
||||||
|
|
|
||||||
|
|
@ -16,9 +16,13 @@ class Model(BaseModel):
|
||||||
sub: SubModel
|
sub: SubModel
|
||||||
|
|
||||||
|
|
||||||
|
class ModelSubclass(Model):
|
||||||
|
y: int
|
||||||
|
|
||||||
|
|
||||||
@app.get("/", response_model=Model, response_model_skip_defaults=True)
|
@app.get("/", response_model=Model, response_model_skip_defaults=True)
|
||||||
def get() -> Model:
|
def get() -> ModelSubclass:
|
||||||
return Model(sub={})
|
return ModelSubclass(sub={}, y=1)
|
||||||
|
|
||||||
|
|
||||||
client = TestClient(app)
|
client = TestClient(app)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue