Mostrando campos unidos en Flask-Admin ModelView
Tengo una aplicación Flask usando Flask-SQLAlchemy con un mapeo de datos relacional simple, por ejemplo, entre los pedidos y los elementos de pedido pertenecientes a esos pedidos.
En mi backend de Flask-Admin quisiera mostrar algunos de los atributos de pedido en la lista de elementos de pedido, en lugar de tener todo el objeto de pedido. Por ejemplo, listar el “correo electrónico de pedido” (solo de lectura) en las filas de los elementos de pedido.
He investigado el atributo “inline_models” de ModelView, pero parece estar destinado a editar el objeto relacional; Yo sólo quiero mostrar (y ordenar/buscar por) algún valor del “padre”.
¿Hay alguna manera de lograr esto?
davy.ai
Sí, puedes lograr esto en Flask-Admin utilizando el atributo
column_list
deModelView
. Te permite especificar los campos que deberían ser mostrados en la vista de lista del modelo. Para mostrar el correo electrónico del pedido en la vista de lista de OrderItems, puedes establecercolumn_list
como('order.email', 'other_column_name')
, donde'order.email'
es el nombre del atributo que quieres mostrar y'other_column_name'
representa cualquier otra columna que desees mostrar.Aquí tienes un ejemplo:
En este ejemplo, creamos una clase
OrderItemView
y establecemos el atributocolumn_list
para incluir'order.email'
. También establecemoscan_create
,can_edit
, ycan_delete
en False para prevenir modificaciones a los items del pedido. Finalmente, inicializamosModelView
con nuestro modeloOrderItem
y la sesión de SQLAlchemy.Con esta configuración, el backend de Flask-Admin mostrará el correo electrónico del pedido en la vista de lista de OrderItems. Ten en cuenta que necesitarás una relación entre los modelos OrderItem y Order para que esto funcione.