Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

121
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!