В следующем коде мы видим, что поле id действительно создается с псевдонимом user_id, когда мы печатаем model_fields.
Однако, когда я затем вызываю model_dump(alias=True), возвращенный dict имеет ключ id, но не имеет ключа user_id, как я ожидаю.
Это ошибка или я что-то упускаю?
Возможно, это связано с alias_priority=2, но, похоже, это не параметр в Field SQLModel, а только в Pydantic.
from uuid import UUID, uuid4
from sqlmodel import Field, SQLModel
class Temp(SQLModel, table=True):
id: UUID = Field(default_factory=uuid4, primary_key=True, alias = "user_id")
t = Temp()
print(t.model_fields)
print(t.model_dump(by_alias=True))
Результат:
{'id': FieldInfo(annotation=UUID, required=False, default_factory=uuid4, alias='user_id', alias_priority=2)}
{'id': UUID('1c8db668-be5c-4942-b494-ef69cbc0ef3a')}






какую версию SQLModel вы используете?
Кажется, псевдоним не работает с версии 0.0.14.
https://github.com/tiangolo/sqlmodel/discussions/725
Как отметил @linpingta, параметр by_alias больше не работает из-за ошибки в SQLModel.
В качестве исправления я расширил класс SQLModel, переопределив метод model_dump():
from sqlmodel import SQLModel as SQLModelBase
class SQLModel(SQLModelBase):
def model_dump(self, *args, **kwargs) -> dict[str, Any]:
model_dump = super().model_dump(*args, **kwargs)
if kwargs.get("by_alias") is False:
return model_dump
for field_name, field_info in self.__fields__.items():
if field_info.alias:
model_dump[field_info.alias] = model_dump.pop(field_name)
return model_dump
Вау, спасибо! А версия 0.0.14 — это когда они обновились до Pydantic v2, поэтому переход на версию 0.0.13 — это большое изменение.