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.alias = field.alias # type: ignore[misc]
|
||||||
new_field.class_validators = field.class_validators # type: ignore[attr-defined]
|
new_field.class_validators = field.class_validators # type: ignore[attr-defined]
|
||||||
new_field.default = field.default # type: ignore[misc]
|
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.required = field.required # type: ignore[misc]
|
||||||
new_field.model_config = field.model_config # type: ignore[attr-defined]
|
new_field.model_config = field.model_config # type: ignore[attr-defined]
|
||||||
new_field.field_info = field.field_info
|
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