将None作为int值传递的Python pydantic模型不是有效的整数(type=type_error.integ



我有一个模型,它接受一些输入,包括sourceSiteId。这是一个整数,但也有许多值作为None。我已经尝试了一些关于模型的事情,但当值为None时,仍然收到value is not a valid integer (type=type_error.integer)的错误。下面是我的模型。

class LatLongModel(BaseModel):
# id: str
object_id: Optional[int] = None
primo_id: Optional[int] = None
name: Optional[str] = None
entity_type: Optional[str] = None
division_id: Optional[int] = None
division: Optional[str] = None
status: Optional[str] = None
longitude: Optional[float] = None
latitude: Optional[float] = None
site_id: Optional[int] = None
source_site_id: Optional[int] = None
site_type: Optional[str] = None

我也试过做source_site_id: int = Nonesource_site_id: Optional[int],但没有成功。我可以尝试什么让这个模型接受整数以及source_site_id的None类型?

在某些背景下,字段类型int会试图将None的值(或您传入的任何值(强制为int。您可以通过包含自定义验证器来覆盖此行为:

from typing import Optional
from pydantic import BaseModel, validator
class LatLongModel(BaseModel):
# id: str
object_id: Optional[int] = None
primo_id: Optional[int] = None
name: Optional[str] = None
entity_type: Optional[str] = None
division_id: Optional[int] = None
division: Optional[str] = None
status: Optional[str] = None
longitude: Optional[float] = None
latitude: Optional[float] = None
site_id: Optional[int] = None
source_site_id: Optional[int] = None
site_type: Optional[str] = None

# Custom validator here
@validator('site_id', 'source_site_id', pre=True)
def allow_none(cls, v):
if v is None:
return None
else:
return v

您可以尝试通过在模型中定义__new__方法来找到问题。它可能会帮助您捕获有问题的值(空字符串或其他东西(:

class LatLongModel(BaseModel):
def __new__(cls, *args, **kwargs):
for k,v in kwargs.items():
print(f"'{k}' : {v.__repr__()} ({type(v)})")
return super().__new__(cls)
# [...]
source_site_id: Optional[int] = None
l = LatLongModel(source_site_id="")
> 'source_site_id' : '' (<class 'str'>)
> Stacktrace [...] pydantic.error_wrappers.ValidationError: 1 validation error for LatLongModel
source_site_id
value is not a valid integer (type=type_error.integer)

最新更新