Как убедиться в том что хотя бы одно из нескольких полей не None?

Я использую Pydantic для валидации данных, которые приходят с фронтенда. Когда пользователь пытается залогиниться при помощи пароля, в качестве логина он может использовать разные данные - почту, номер телефона, имя пользователя.
Имею такую модель:
from pydantic import BaseModel, EmailStr

class LoginRequest(BaseModel):
    client_id: str

    username: str | None = None
    email: EmailStr | None = None
    phone: str | None = None
    password: str


Как мне проверять что хотя бы одно из этих полей не None?
  • Вопрос задан
  • 282 просмотра
Решения вопроса 1
Zagir-vip
@Zagir-vip
Web dev, Game dev, app dev, Разработчик на Python!
Давайте вместе почитаем документацию

from pydantic import BaseModel, ValidationError, field_validator


class Model(BaseModel):
    x: int

    @model_validator(mode='before')
    @classmethod
    def validate_x(cls, v: int) -> int:
        if x is None:
           raise ValueError('X is None')
           return cls


try:
    Model(x=None)
except ValidationError as e:
    print(e)

   """X is None"""
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@DanilGladysh Автор вопроса
class LoginRequest(BaseModel):
    client_id: str

    username: str | None = None
    email: EmailStr | None = None
    phone: str | None = None
    password: str

    @model_validator(mode='after')
    def check_login_data_none(self) -> 'LoginRequest':
        username = self.username
        email = self.email
        phone = self.phone
        if username == email == phone == None:
            raise ValueError('At least one login field should be not None')
        return self
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы