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.

Los flask-admin column_formatters no son llamados.

Estoy usando Flask-Admin y me gustaría agregar un campo adicional a mi vista de modelo en línea. El propósito es mostrar una imagen desde el sistema de archivos.

El problema es que mi formateador de columna nunca se llama y la imagen nunca se carga. Cualquier sugerencia sería muy apreciada.

class ImageView(ModelView):
    form_columns = ['id', 'tipo_mime', 'ruta']

    @staticmethod
    def _user_formatter(vista, contexto, modelo, nombre):
        logging.warning("NO LLAMADO")
        return Markup('<img src="%s">' % form.thumbgen_filename(1))

    column_formatters = dict(ruta=lambda v, c, m, p: ImageView._user_formatter(v, c, m, p))

    form_extra_fields = {
        'ruta': form.ImageUploadField('Imagen', base_path='/app/uploads', thumbnail_size=(400, 400, True))
    }
class VehicleModelView(ModelView):
    inline_models = [ImageView(DbModel, db.session)]
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para agregar un campo adicional a una vista de modelo en línea en Flask-Admin, sigue estos pasos:

    1. Define una función de formato _user_formatter para la columna en la que deseas mostrar la imagen. En este formateador, utiliza Markup para crear un elemento HTML con una etiqueta img que haga referencia a la ruta de la imagen.
    2. Agrega la función de formato al diccionario column_formatters.

    3. Define el campo adicional que deseas agregar utilizando form.ImageUploadField. Especifica el nombre del campo, etiqueta y la ruta base donde se almacena la imagen.

    4. Agrega la vista de modelo en línea a la lista inline_models de la vista de modelo principal.

    Nota: En el fragmento de código proporcionado, la función _user_formatter no se está llamando porque se está refiriendo a form.thumbgen_filename que no ha sido definido. En su lugar, debería hacer referencia a la función form.thumbgen_filename_fn.

    Aquí está el código actualizado:

    from flask_admin.form import ImageUploadField, thumbgen_filename_fn
    
    class ImageView(ModelView):
        form_columns = ['id', 'mime_type', 'path']
    
        @staticmethod
        def _user_formatter(view, context, model, name):
            logging.warning("CALLED")
            return Markup('<img src="%s">' % form.thumbgen_filename_fn(model.path))
    
        column_formatters = dict(path=_user_formatter)
    
        form_extra_fields = {
            'image': ImageUploadField('Image', base_path='/app/uploads', thumbnail_size=(400, 400, True))
        }
    
    class VehicleModelView(ModelView):
        inline_models = [ImageView(DbModel, db.session)]
    

    Esto te permitirá mostrar un campo adicional de imagen en tu vista de modelo en línea utilizando Flask-Admin.

Comments are closed.