mirror of https://github.com/tiangolo/fastapi.git
⚡️ Fix `default_factory` for response model field with Pydantic V1 (#9704)
Co-authored-by: Motov Yurii <109919500+YuriiMotov@users.noreply.github.com>
This commit is contained in:
parent
b01d5c97a0
commit
f1e6f978ce
|
|
@ -137,6 +137,7 @@ def create_cloned_field(
|
|||
new_field.alias = field.alias # type: ignore[misc]
|
||||
new_field.class_validators = field.class_validators # type: ignore[attr-defined]
|
||||
new_field.default = field.default # type: ignore[misc]
|
||||
new_field.default_factory = field.default_factory # type: ignore[attr-defined]
|
||||
new_field.required = field.required # type: ignore[misc]
|
||||
new_field.model_config = field.model_config # type: ignore[attr-defined]
|
||||
new_field.field_info = field.field_info
|
||||
|
|
|
|||
|
|
@ -0,0 +1,47 @@
|
|||
from fastapi import FastAPI
|
||||
from fastapi.testclient import TestClient
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
app = FastAPI()
|
||||
|
||||
|
||||
class ResponseModel(BaseModel):
|
||||
code: int = 200
|
||||
message: str = Field(default_factory=lambda: "Successful operation.")
|
||||
|
||||
|
||||
@app.get(
|
||||
"/response_model_has_default_factory_return_dict",
|
||||
response_model=ResponseModel,
|
||||
)
|
||||
async def response_model_has_default_factory_return_dict():
|
||||
return {"code": 200}
|
||||
|
||||
|
||||
@app.get(
|
||||
"/response_model_has_default_factory_return_model",
|
||||
response_model=ResponseModel,
|
||||
)
|
||||
async def response_model_has_default_factory_return_model():
|
||||
return ResponseModel()
|
||||
|
||||
|
||||
client = TestClient(app)
|
||||
|
||||
|
||||
def test_response_model_has_default_factory_return_dict():
|
||||
response = client.get("/response_model_has_default_factory_return_dict")
|
||||
|
||||
assert response.status_code == 200, response.text
|
||||
|
||||
assert response.json()["code"] == 200
|
||||
assert response.json()["message"] == "Successful operation."
|
||||
|
||||
|
||||
def test_response_model_has_default_factory_return_model():
|
||||
response = client.get("/response_model_has_default_factory_return_model")
|
||||
|
||||
assert response.status_code == 200, response.text
|
||||
|
||||
assert response.json()["code"] == 200
|
||||
assert response.json()["message"] == "Successful operation."
|
||||
Loading…
Reference in New Issue