# pydantic.errors.PydanticUserError: @field_validator 'check_email' should be a classmethod or a staticmethod. Wrap the function with @classmethod or @staticmethod.

- **ID:** `python/pydantic-field-validator-signature-error`
- **Domain:** python
- **Category:** type_error
- **Verification:** ai_generated
- **Fix Rate:** 80%

## Root Cause

In Pydantic v2, @field_validator must decorate a classmethod (or staticmethod). Missing the @classmethod decorator causes a PydanticUserError at class definition time.

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| 2.x | active | — | — |

## Workarounds

1. **** (98% success)
   ```
   from pydantic import BaseModel, field_validator

class User(BaseModel):
    email: str

    @field_validator('email')
    @classmethod
    def check_email(cls, v):
        assert '@' in v
        return v
   ```
2. **** (95% success)
   ```
   from pydantic import BaseModel, field_validator

class User(BaseModel):
    email: str

    @field_validator('email')
    @staticmethod
    def check_email(v):
        return v.lower()
   ```

## Dead Ends

- **** — Decorator order matters: @field_validator must be the outermost decorator, i.e., listed first. (80% fail)
- **** — @validator is deprecated in v2 and raises PydanticDeprecatedSince20 warnings; it also still requires classmethod semantics. (60% fail)
