mirror of
https://github.com/PaiGramTeam/sqlmodel.git
synced 2024-11-29 02:27:32 +00:00
🐛 Fix handling validators for non-default values (#253)
Co-authored-by: Sebastián Ramírez <tiangolo@gmail.com>
This commit is contained in:
parent
71d6fcc31b
commit
d380736043
@ -582,7 +582,7 @@ class SQLModel(BaseModel, metaclass=SQLModelMetaclass, registry=default_registry
|
|||||||
values, fields_set, validation_error = validate_model(cls, value)
|
values, fields_set, validation_error = validate_model(cls, value)
|
||||||
if validation_error:
|
if validation_error:
|
||||||
raise validation_error
|
raise validation_error
|
||||||
model = cls(**values)
|
model = cls(**value)
|
||||||
# Reset fields set, this would have been done in Pydantic in __init__
|
# Reset fields set, this would have been done in Pydantic in __init__
|
||||||
object.__setattr__(model, "__fields_set__", fields_set)
|
object.__setattr__(model, "__fields_set__", fields_set)
|
||||||
return model
|
return model
|
||||||
|
33
tests/test_validation.py
Normal file
33
tests/test_validation.py
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
from pydantic import validator
|
||||||
|
from pydantic.error_wrappers import ValidationError
|
||||||
|
from sqlmodel import SQLModel
|
||||||
|
|
||||||
|
|
||||||
|
def test_validation(clear_sqlmodel):
|
||||||
|
"""Test validation of implicit and explict None values.
|
||||||
|
|
||||||
|
# For consistency with pydantic, validators are not to be called on
|
||||||
|
# arguments that are not explicitly provided.
|
||||||
|
|
||||||
|
https://github.com/tiangolo/sqlmodel/issues/230
|
||||||
|
https://github.com/samuelcolvin/pydantic/issues/1223
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
class Hero(SQLModel):
|
||||||
|
name: Optional[str] = None
|
||||||
|
secret_name: Optional[str] = None
|
||||||
|
age: Optional[int] = None
|
||||||
|
|
||||||
|
@validator("name", "secret_name", "age")
|
||||||
|
def reject_none(cls, v):
|
||||||
|
assert v is not None
|
||||||
|
return v
|
||||||
|
|
||||||
|
Hero.validate({"age": 25})
|
||||||
|
|
||||||
|
with pytest.raises(ValidationError):
|
||||||
|
Hero.validate({"name": None, "age": 25})
|
Loading…
Reference in New Issue
Block a user