Stellen Sie den Anfangswert eines pydantischen 2 -Feldes mit Validator festPython

Python-Programme
Anonymous
 Stellen Sie den Anfangswert eines pydantischen 2 -Feldes mit Validator fest

Post by Anonymous »

Sa sagen, ich habe das folgende pydantische 2.10.6-Modell, wobei x aus einem anderen Feld dynamisch berechnet wird, y :
from pydantic import BaseModel, Field, field_validator, ValidationInfo

class Foo(BaseModel):
x: int = Field(init=False)
y: int

@field_validator("x", mode="before")
@staticmethod
def set_x(val: None, info: ValidationInfo):
return info.data["y"] + 1

Foo(y=1)
< /code>
Ausführen, wie dies fehlschlägt, validieren: < /p>
pydantic_core._pydantic_core.ValidationError: 1 validation error for Foo
x
Field required [type=missing, input_value={'y': 1}, input_type=dict]
< /code>

Ich kann den Laufzeitfehler "fixieren", indem er X < /code> a Standard angibt: < /p>
x: int = Field(init=False, default=None)
< /code>
, aber dann schlägt dies fehlschlug, wenn Sie das Überprüfungen im Pyright mit: < /p>
gebenType "None" is not assignable to declared type "int"
< /code>

Ich kann es auch mit einem model_validator < /code> beheben, aber dies ist ein bisschen weniger ordentlich: < /p>
from pydantic import BaseModel, Field, model_validator

class Foo(BaseModel):
x: int = Field(init=False)
y: int

@model_validator(mode="before")
@staticmethod
def set_x(data: dict):
data["x"] = data["y"] + 1
return data

Foo(y=1)
< /code>

Wie kann ich dieses Modell nur mit einem Feld Validator mithilfe eines Feldvalidators sauber darstellen?>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post