• pydantic学习与使用13.Field 定制字段使用别名alias 上海


    前言

    pydantic 里面json是一个内置属性,我想定义一个字段名称是json,这就会引起报错: Field name "json" shadows a BaseModel attribute; use a different field name with "alias='json'"
    因为 json 是BaseModel 的一个属性,需使用别名alias='json'

    遇到的问题

    代码如下,需定义一个json的字段名称

    from pydantic import BaseModel, Field
    from typing import List, Optional, Any, Optional
    
    
    class APIRequest(BaseModel):
        method: str
        url: str
        json: Optional[dict]
    
    
    req = APIRequest(
        method='POST',
        url='/api/login',
        json={"user": "test", "password": "123"}
    )
    print(req.json())
    

    运行报错:Field name "json" shadows a BaseModel attribute; use a different field name with "alias='json'"
    从报错看解决办法是需要使用别名"alias='json'"

    使用别名alias

    alias 别名的使用,需配合 Field 定义字段

    from pydantic import BaseModel, Field
    
    class APIRequest(BaseModel):
        method: str
        url: str
        json_: Optional[dict] = Field(alias='json')
    

    在传值的时候,还是传json名称

    req = APIRequest(
        method='POST',
        url='/api/login',
        json={"user": "test", "password": "123"}
    )
    print(req.json())
    

    运行结果

    {"method": "POST", "url": "/api/login", "json_": {"user": "test", "password": "123"}}
    

    得到的结果字段名称是"json_"

    by_alias=True

    我们期望得到的结果 "json_" 替换成别名json, 于是需使用by_alias=True

    req = APIRequest(
        method='POST',
        url='/api/login',
        json={"user": "test", "password": "123"}
    )
    print(req.json(by_alias=True))
    print(req.dict(by_alias=True))
    

    运行结果

    {"method": "POST", "url": "/api/login", "json": {"user": "test", "password": "123"}}
    {'method': 'POST', 'url': '/api/login', 'json': {'user': 'test', 'password': '123'}}
    

    这样就可以避免跟一些属性名称重复的问题。

  • 相关阅读:
    十分钟学会Java8:lambda表达式和Stream API
    史上最全的Spring Boot Cache使用与整合
    史上最全的Spring Boot Starter开发手册
    深入理解JAVA虚拟机(内存模型+GC算法+JVM调优)
    深入理解Mybatis技术与原理
    c++入门之命名空间存在的意义
    机器学习第一篇——最近邻kNN
    Python学习第十八篇——低耦合函数设计思想
    Python学习第十六篇——异常处理
    Python学习第十五篇——类继承和类实例化
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/16754341.html
Copyright © 2020-2023  润新知