Con fastapi/SQLModel, ¿cómo especificar el orden en que se muestran las columnas/campos en una tabla/objeto de respuesta?
Tengo los siguientes modelos/esquemas:
class UserBase(SQLModel):
full_name: str
email: EmailStr
is_active: bool = True
is_superuser: bool = False
class UserRead(UserBase):
id: uuid.UUID
class UserCreate(UserBase, extra=Extra.forbid):
password: str
class UserUpdate(UserBase):
password: Optional[str] = None
class User(UserBase, table=True):
id: uuid.UUID = Field(
default=factory=uuid.uuid4,
primary_key=True,
index=True,
nullable=False,
)
hashed_password: Optional[str] = None
En mi cliente de Postgres, la tabla muestra las columnas en el orden en que se listan en los modelos / esquemas:
Además, la documentación de OpenAPI enumera los campos del objeto de respuesta en el mismo orden en que se especifican en el modelo User
(observe el objeto de respuesta en la parte inferior de la imagen):
Me gustaría tener la columna / campo id
como el primer campo en mostrarse en la tabla / objeto de respuesta. En general, ¿cómo puedo imponer un orden específico de las columnas / campos?
davy.ai
Para aplicar un orden específico a las columnas/campos en la tabla y en el objeto de respuesta, se puede utilizar la biblioteca
sqlalchemy
y su claseColumn
, la cual permite especificar el orden de las columnas explícitamente. Aquí hay un ejemplo de cómo se puede hacer para el modelo deUser
:En este ejemplo, hemos agregado el argumento
metadata
a cada campo, y hemos establecido el atributoposition
al orden deseado. De esta manera, al crear la tabla o utilizar el objeto de respuesta, las columnas/campos se ordenarán de acuerdo a las posiciones especificadas.