Pydantic создать модель где используется символ "-"

Pydantic создать модель где используется символ -. Каким образом это делается?

Пример даты:

{"service": "lgd", "sub-forums": "123"}

Ответы (2 шт):

Автор решения: gil9red

Используйте alias в Field модели

Пример:

from pydantic import BaseModel, Field

class Model(BaseModel):
    service: str
    sub_forums: int = Field(alias='sub-forums')


m = Model.parse_raw(b'{"service": "lgd", "sub-forums": "123"}')
print(m.sub_forums)
# 123

print(m.dict())
# {'service': 'lgd', 'sub_forums': 123}
→ Ссылка
Автор решения: hedgehogues

Чтобы создать модель с помощью pydantic, вам нужно создать класс, наследующий от BaseModel, и определить атрибуты модели с помощью аннотаций типа. Например:

from pydantic import BaseModel

class User(BaseModel):
    id: int
    name: str
    email: str

В этом примере у модели User есть три атрибута: id, name и email. Каждый атрибут определен с помощью аннотации типа, указывающей тип данных, который ожидается у этого атрибута.

Чтобы создать экземпляр модели, вы можете вызвать конструктор класса, передав в него словарь с данными:

data = {
    "id": 123,
    "name": "John Smith",
    "email": "[email protected]",
}

user = User(**data)

В этом примере создается экземпляр модели User с атрибутами id, name и email, установленными в соответствии с данными из словаря data.

Вы можете использовать квадратные скобки [] для указания атрибута, использующего символ дефиса:

from pydantic import BaseModel

class MyModel(BaseModel):
    service: str
    ["sub-forums"]: str

Также можете использовать атрибут alias для переименования атрибута с помощью символа дефиса:

from pydantic import BaseModel

class MyModel(BaseModel):
    service: str
    sub_forums: str = Field(..., alias="sub-forums")

Таким образом вы можете определить модель, использующую символ дефиса. При обработке данных с помощью этой модели вы сможете передать значение атрибута sub-forums с помощью ключа sub_forums.

Например:

model = MyModel({"service": "lgd", "sub_forums": "123"})
assert model.service == "lgd"
assert model["sub-forums"] == "123"
→ Ссылка