Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

117
Vistas
Confundido por el ancho y alto de ImageField de Django

He agregado los campos de width y height de la imagen a un modelo basado en ImageField:

 class Photo(models.Model): height = models.IntegerField() width = models.IntegerField() image = models.ImageField( upload_to=settings.PHOTO_UPLOAD_TO, height_field='height', width_field='width' )

Cuando hago manage.py makemigrations , se me pide el valor predeterminado para las filas existentes. Ya tengo muchas fotos en la base de datos (es un sitio en ejecución), por lo tanto, elegí agregar default=0 a width y height .

 height = models.IntegerField(default=0) width = models.IntegerField(default=0)

Ahora, para todas las fotos existentes, las dos columnas se completan con ceros, como se esperaba. Sin embargo, lo que no esperaba era que Photo.objects.all()[0].width y .height ahora devolvieran los valores correctos distintos de cero. ¿Por qué? No pude encontrar nada sobre tal comportamiento en la documentación .

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Parece que la magia se está realizando en el método ImageField.update_dimension_fields de Django. Los comentarios en el código dicen:

Actualice los campos de ancho y alto del campo, si están definidos.

Este método está conectado a la señal post_init del modelo para actualizar las dimensiones después de instanciar una instancia del modelo. Sin embargo, las dimensiones no se actualizarán si los campos de dimensiones ya están completos. Esto evita recálculos innecesarios al cargar un objeto de la base de datos.

Se puede forzar la actualización de las dimensiones con force=True , que es como ImageFileDescriptor.__set__ llama a este método.

Entonces, al crear una instancia del modelo, update_dimension_fields lee las dimensiones del archivo de imagen y las almacena en la instancia. Esto incurrirá en un pequeño golpe en un entorno en vivo.

Guardar todas las imágenes almacenará las dimensiones en la base de datos:

 In [1]: for p in Photo.objects.all(): ...: p.save()
over 4 years ago · Santiago Trujillo Denunciar

0

La documentación dice https://docs.djangoproject.com/en/1.10/ref/models/fields/#django.db.models.ImageField.height_field

ImageField.height_field:

Nombre de un campo de modelo que se completará automáticamente con la altura de la imagen cada vez que se guarde la instancia del modelo .

el modelo save () debe haber rellenado automáticamente tanto la height como el width

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda