Output of python -c "import pydantic.utils; print(pydantic.utils.version_info())":
pydantic version: 1.6.1
I have a model
class User(BaseModel):
login_name: str = Field(..., alias='loginName')
display_name: str = Field(..., alias='displayName')
localized_name: str = Field(..., alias='localizedName')
extension: str = Field(..., alias='extension')
agent_id: Optional[str] = Field(..., alias='agentId')
I use alias for external API (the fields in external API like in alias). And than I have my public API
Like this:
@app.get('/users', response_model=List[User]) # type: ignore
def get_users()
return [user.dict(by_alias=False)]
The problem is that I get in response fields by alias, but I want by field names.
If I have -> @app.get('/users', response_model=List[User])
then response -> [{"loginName":"some_login","displayName":"Mark Gordon","localizedName":"Jamie Bell","extension":"123","agentId":"8235"}]
If I have -> @app.get('/users', response_model=List[Dict])
then response -> [{"login_name":"some_login","display_name":"Mark Gordon","localized_name":"Jamie Bell","extension":"123","agent_id":"8235"}]
What I want:
As I understand, it's not possible to maintain simultaneously.
I have only one solution, duplicate User model, but without aliases and than convert to it
class ExternalUser(BaseModel):
login_name: str
display_name: str
localized_name: str
extension: str
agent_id: Optional[str]
Do you know better solution?
@romutchio
I guess your question depend on FastAPI.
You should create an issue on the FastAPI project.
I answer your question.
You can use response_model_by_alias=False on @app.get to get a response as field name
```python
from typing import List, Optional
import fastapi
import uvicorn as uvicorn
from pydantic import BaseModel, Field
app = fastapi.FastAPI()
class User(BaseModel):
login_name: str = Field(..., alias='loginName')
display_name: str = Field(..., alias='displayName')
localized_name: str = Field(..., alias='localizedName')
extension: str = Field(..., alias='extension')
agent_id: Optional[str] = Field(..., alias='agentId')
@app.get('/users', response_model=List[User], response_model_by_alias=False)
def get_users():
return [User(loginName='abc', displayName='efg', localizedName='hij', extension='xyz', agentId='123')]
if __name__ == '__main__':
uvicorn.run(app)
```
Output
bash
$ curl curl http://127.0.0.1:8000/users
[{"login_name":"abc","display_name":"efg","localized_name":"hij","extension":"xyz","agent_id":"123"}]
Thanks a bunch @koxudaxi !
Most helpful comment
Thanks a bunch @koxudaxi !