Код: Выделить всё
class TimestampWithSplit(RootModel):
root: datetime
@classmethod
def __get_pydantic_core_schema__(
cls, source: Type[Any], handler: GetCoreSchemaHandler
) -> core_schema.CoreSchema:
return core_schema.chain_schema(
[
core_schema.typed_dict_schema(
{
"date": core_schema.typed_dict_field(core_schema.date_schema()),
"time": core_schema.typed_dict_field(core_schema.time_schema()),
}
),
core_schema.no_info_plain_validator_function(cls.validate_to_datetime),
]
)
@staticmethod
def validate_to_datetime(value: dict) -> datetime:
return datetime.combine(value["date"], value["time"])
- Теперь я хочу добавить описания в сгенерированную схему JSON. . В настоящее время TimestampWithSplit.model_json_schema() возвращает
Код: Выделить всё
{'properties': {'date': {'format': 'date', 'title': 'Date', 'type': 'string'},
'time': {'format': 'time', 'title': 'Time', 'type': 'string'}},
'required': ['date', 'time'],
'type': 'object'}
Код: Выделить всё
{'properties': {'date': {'format': 'date', 'title': 'Date', 'type': 'string', 'description': 'ISO format date, blah blah'},
'time': {'format': 'time', 'title': 'Time', 'type': 'string', 'description': 'ISO format time, blah blah'}},
'required': ['date', 'time'],
'type': 'object'}
- Добавьте пользовательский валидатор для поля даты, чтобы он мог анализировать однозначные числа дня и месяца. Обычно я делаю это так:
Код: Выделить всё
def validator(value: str):
try:
return datetime.strptime(value, "%Y-%m-%d").date()
except ValueError:
return None
Я иду по неправильному пути? Как мне получить модель, которая имеет дату и время в виде отдельных полей, но возвращает дату и время из model_validate_json, а также настраивает схему JSON и проверку даты?
Подробнее здесь: https://stackoverflow.com/questions/790 ... e-and-time