Browse Source

🐛 Fix skip_defaults implementation when returning a Pydantic model (#422)

pull/481/head
dmontagu 6 years ago
committed by Sebastián Ramírez
parent
commit
38495fffa5
  1. 2
      fastapi/routing.py
  2. 29
      tests/test_skip_defaults.py

2
fastapi/routing.py

@ -52,6 +52,8 @@ def serialize_response(
errors.extend(errors_)
if errors:
raise ValidationError(errors)
if skip_defaults and isinstance(response, BaseModel):
value = response.dict(skip_defaults=skip_defaults)
return jsonable_encoder(
value,
include=include,

29
tests/test_skip_defaults.py

@ -0,0 +1,29 @@
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel
from starlette.testclient import TestClient
app = FastAPI()
class SubModel(BaseModel):
a: Optional[str] = "foo"
class Model(BaseModel):
x: Optional[int]
sub: SubModel
@app.get("/", response_model=Model, response_model_skip_defaults=True)
def get() -> Model:
return Model(sub={})
client = TestClient(app)
def test_return_defaults():
response = client.get("/")
assert response.json() == {"sub": {}}
Loading…
Cancel
Save