Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

113
Visualizações
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 .

about 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

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()
about 4 years ago · Santiago Trujillo Relatório

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

about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda