|
2 | 2 |
|
3 | 3 | import pytest |
4 | 4 | from pydantic.error_wrappers import ValidationError |
5 | | -from sqlmodel import SQLModel |
| 5 | +from sqlmodel import Field, SQLModel |
6 | 6 |
|
7 | 7 | from .conftest import needs_pydanticv1, needs_pydanticv2 |
8 | 8 |
|
@@ -63,3 +63,34 @@ def reject_none(cls, v): |
63 | 63 |
|
64 | 64 | with pytest.raises(ValidationError): |
65 | 65 | Hero.model_validate({"name": None, "age": 25}) |
| 66 | + |
| 67 | + |
| 68 | +@needs_pydanticv2 |
| 69 | +def test_validation_with_table_true(): |
| 70 | + """Test validation with table=True.""" |
| 71 | + from pydantic import field_validator |
| 72 | + |
| 73 | + class Hero(SQLModel, table=True): |
| 74 | + name: Optional[str] = Field(default=None, primary_key=True) |
| 75 | + secret_name: Optional[str] = None |
| 76 | + age: Optional[int] = None |
| 77 | + |
| 78 | + @field_validator("age", mode="after") |
| 79 | + @classmethod |
| 80 | + def double_age(cls, v): |
| 81 | + if v is not None: |
| 82 | + return v * 2 |
| 83 | + return v |
| 84 | + |
| 85 | + Hero(name="Deadpond", age=25) |
| 86 | + Hero.model_validate({"name": "Deadpond", "age": 25}) |
| 87 | + with pytest.raises(ValidationError): |
| 88 | + Hero(name="Deadpond", secret_name="Dive Wilson", age="test") |
| 89 | + with pytest.raises(ValidationError): |
| 90 | + Hero.model_validate({"name": "Deadpond", "age": "test"}) |
| 91 | + |
| 92 | + double_age_hero = Hero(name="Deadpond", age=25) |
| 93 | + assert double_age_hero.age == 50 |
| 94 | + |
| 95 | + double_age_hero = Hero.model_validate({"name": "Deadpond", "age": 25}) |
| 96 | + assert double_age_hero.age == 50 |
0 commit comments