es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes lograr esto en Flask-Admin utilizando el atributo column_list de ModelView. 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 establecer column_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:

    from flask_admin.contrib.sqla import ModelView
    
    class OrderItemView(ModelView):
        can_create = False
        can_edit = False
        can_delete = False
    
        column_list = ('order.email', 'name', 'quantity')
    
        def __init__(self, session, **kwargs):
            super(OrderItemView, self).__init__(OrderItem, session, **kwargs)
    

    En este ejemplo, creamos una clase OrderItemView y establecemos el atributo column_list para incluir 'order.email'. También establecemos can_create, can_edit, y can_delete en False para prevenir modificaciones a los items del pedido. Finalmente, inicializamos ModelView con nuestro modelo OrderItem 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.

Comments are closed.