#python #validation #python-typing #pydantic #python-dataclasses
Вопрос:
Я тщательно искал ответ на этот вопрос, но безрезультатно.
При использовании pydantic ge=0
проверка item_main
в следующем примере проходит без сучка и задоринки, как и следовало ожидать (в соответствии с инструкциями: https://pydantic-docs.helpmanual.io/usage/schema/#field-customisation):
class SubCls(BaseModel):
item_sub: float = Field(...)
class MainCls(BaseModel):
item_main1: float = Field(...)
item_main2: SubCls
class Config:
fields = {'item_main1': {'ge': 0}}
Однако ge=0
проверка вложенности item_sub
в следующем примере не работает:
class SubCls(BaseModel):
item_sub: float = Field(...)
class MainCls(BaseModel):
item_main1: float = Field(...)
item_main2: SubCls
class Config:
fields = {'item_main2': {"item_sub":{'ge': 0}}}
Также не происходит, когда он SubCl
наследуется MainCls
:
class SubCls(BaseModel):
item_sub: float = Field(...)
class MainCls(SubCls):
item_main1: float = Field(...)
class Config:
fields = {"item_sub":{'ge': 0}}
Мне интересно, как я могу наилучшим образом применить настройку полей к вложенным моделям. Конечно, самый элегантный способ сделать это-создать новые SubCls
модели с добавлением информации о проверке, но в моем случае это привело бы к довольно большому количеству моделей.
Я был бы благодарен за любую помощь.
Этот запрос был перекрестно размещен на форуме github pydantic: https://github.com/samuelcolvin/pydantic/discussions/3400.
Комментарии:
1. Я думаю, что если у вас разные правила проверки для того, что кажется одной моделью, на самом деле у вас разные модели. Сколько моделей вам нужно было бы создать? Почему их слишком много?
2. Я хотел бы использовать одни и те же схемы для многих различных функций, но многие из этих функций имеют разные
Field
аргументы параметров (например, разныеge
,gt
,le
lt
,title
иdescription
). Конечно, я мог бы также проверить входные данные в функциях, но это несколько противоречит цели проверки pydantic. Я надеялся использовать общие модели/схемы, но с различнымиclass Config
вариантами, чтобы разнообразить проверки моделей. Это сэкономило бы много времени на дублировании.3. @Svencken вопрос неясен, но похоже, что для этого вам может понадобиться метакласс
4. @rv.kvetch, спасибо, я займусь этим. Приносим извинения, если вопрос неясен, с удовольствием отвечу на любые вопросы по этому поводу, чтобы помочь прояснить ситуацию.