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

如何约束PolyFactory生成的类型?避免Dict中出现datetime字段

约束PolyFactory生成的类型,避免出现datetime字段

方法1:自定义字段生成器过滤datetime

通过重写TypedDictFactory的get_value方法,自定义值生成逻辑,递归处理嵌套dict时排除datetime类型:

from typing import Any, Type
from polyfactory.factories.typed_dict_factory import TypedDictFactory
from polyfactory.value_generators import generate_random_value
from datetime import datetime

def filter_datetime_value_generator(type_: Type[Any]) -> Any:
    if type_ is dict:
        def build_filtered_dict() -> dict:
            filtered_dict = {}
            for _ in range(3):
                key = generate_random_value(str)
                # 指定允许生成的类型,排除datetime
                value = generate_random_value((int, str, float, list, dict))
                if isinstance(value, dict):
                    value = build_filtered_dict()
                elif isinstance(value, list):
                    value = [generate_random_value((int, str, float, dict)) for _ in range(2)]
                filtered_dict[key] = value
            return filtered_dict
        return build_filtered_dict()
    # 遇到datetime类型时,替换为其他允许的类型
    elif type_ is datetime:
        return generate_random_value(str)
    return generate_random_value(type_)

class FilteredTypedDictFactory(TypedDictFactory):
    @classmethod
    def get_value(cls, type_: Type[Any]) -> Any:
        return filter_datetime_value_generator(type_)

class S(TypedDict):
    d: dict

print(FilteredTypedDictFactory.create_factory(model=S).build())

方法2:用自定义类型别名明确允许的类型

即使嵌套结构复杂,也可以定义递归的类型别名,限定dict的取值范围,让PolyFactory仅生成指定类型:

from typing import TypedDict, Union, List, Dict
from polyfactory.factories.typed_dict_factory import TypedDictFactory

# 递归定义允许的类型,完全排除datetime
AllowedValue = Union[int, str, float, List['AllowedValue'], Dict[str, 'AllowedValue']]

class S(TypedDict):
    d: Dict[str, AllowedValue]

print(TypedDictFactory.create_factory(model=S).build())

方法3:全局配置排除datetime类型

直接修改PolyFactory的全局配置,禁止生成datetime类型实例:

from polyfactory import configure
from datetime import datetime
from polyfactory.factories.typed_dict_factory import TypedDictFactory
from typing import TypedDict

# 全局排除datetime类型
configure(exclude_types=[datetime])

class S(TypedDict):
    d: dict

print(TypedDictFactory.create_factory(model=S).build())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 20:11:21