You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何更新Pydantic嵌套列表模型中的CreateDate字段?

问题:无法更新Pydantic模型中嵌套的CreateDate字段

我基于boto3的IAM响应定义了以下Pydantic模型:

from datetime import datetime
from typing import List
from pydantic import BaseModel, Field

class UserInfo(BaseModel):
    UserName: str
    AccessKeyId: str
    Status: str
    CreateDate: datetime.datetime


class HTTPHeaders(BaseModel):
    server: str
    date: str
    x_amzn_requestid: str = Field(..., alias='x-amzn-requestid')


class ResponseMetadata(BaseModel):
    RequestId: str
    HTTPStatusCode: int
    HTTPHeaders: HTTPHeaders
    RetryAttempts: int


class ListAccessKeysModel(BaseModel):
    AccessKeyMetadata: List[UserInfo]
    IsTruncated: bool
    ResponseMetadata: ResponseMetadata

我需要在单元测试中修改UserInfo模型里的CreateDate字段,但尝试了多种方法都没成功,返回的数据里CreateDate始终没变化。我试过这段代码:

list_access_keys = list_access_keys_model.model_copy(update={'AccessKeyMetaData': [{'CreateDate': create_date}]})

解决方法
  1. 修正拼写错误
    你代码里的AccessKeyMetaData拼写错误,模型中定义的字段名是AccessKeyMetadata(末尾为ta而非da),这是更新无效的首要原因。

  2. 正确处理嵌套列表的更新
    model_copy的update参数无法直接通过字典更新嵌套列表中的单个字段——因为列表内的元素是UserInfo实例,而非普通字典。你需要先取出原列表元素,修改对应字段后重新构造列表:

    示例代码(修改第一个AccessKey的CreateDate):

    # 遍历原AccessKeyMetadata列表,更新目标字段
    updated_access_keys = []
    for key in list_access_keys_model.AccessKeyMetadata:
        # 复制UserInfo实例并更新CreateDate
        updated_key = key.model_copy(update={'CreateDate': create_date})
        updated_access_keys.append(updated_key)
    
    # 复制ListAccessKeysModel并替换AccessKeyMetadata
    list_access_keys = list_access_keys_model.model_copy(
        update={'AccessKeyMetadata': updated_access_keys}
    )
    

    如果需要按特定条件修改(比如指定AccessKeyId):

    target_access_key_id = "目标AccessKeyId"
    updated_access_keys = []
    for key in list_access_keys_model.AccessKeyMetadata:
        if key.AccessKeyId == target_access_key_id:
            updated_key = key.model_copy(update={'CreateDate': create_date})
            updated_access_keys.append(updated_key)
        else:
            updated_access_keys.append(key)
    
    list_access_keys = list_access_keys_model.model_copy(
        update={'AccessKeyMetadata': updated_access_keys}
    )
    
  3. 批量更新简化写法(可选)
    若要批量更新所有UserInfo的CreateDate,可以用列表推导式简化代码:

    updated_access_keys = [
        key.model_copy(update={'CreateDate': create_date})
        for key in list_access_keys_model.AccessKeyMetadata
    ]
    list_access_keys = list_access_keys_model.model_copy(
        update={'AccessKeyMetadata': updated_access_keys}
    )
    

内容的提问来源于stack exchange,提问作者user24962262

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 04:07:33