Antes de guardar el modelo, cambio el tamaño de una imagen. Pero, ¿cómo puedo verificar si se agregó una nueva imagen o solo una descripción actualizada, para poder omitir la reescalada cada vez que se guarda el modelo?
class Model(model.Model):
image=models.ImageField(upload_to='folder')
thumb=models.ImageField(upload_to='folder')
description=models.CharField()
def save(self, *args, **kwargs):
if self.image:
small=rescale_image(self.image,width=100,height=100)
self.image_small=SimpleUploadedFile(name,small_pic)
super(Model, self).save(*args, **kwargs)
Quiero volver a escalar solo si se carga una nueva imagen o si se actualiza la imagen, pero no cuando se actualiza la descripción.
Respuestas:
Algunos pensamientos:
No estoy seguro de si funcionaría bien con todas las herramientas pseudo-auto django (Ejemplo: ModelForm, contrib.admin, etc.).
fuente
Verifique el campo pk del modelo. Si es Ninguno, entonces es un objeto nuevo.
Editar: agregué una marca para 'imagen' en form.changed_data. Esto supone que está utilizando el sitio de administración para actualizar sus imágenes. También tendrá que anular el método predeterminado save_model como se indica a continuación.
fuente
Puede proporcionar un argumento adicional para confirmar que se publica una nueva imagen.
Algo como:
o pasar solicitud variable
Creo que esto no romperá su salvación cuando se llama simplemente.
Puede poner esto en su admin.py para que también funcione con el sitio de administración (para la segunda de las soluciones anteriores):
fuente
Lo que hice para lograr el objetivo fue hacer esto ...
y debajo del método save () es esto ...
así que cuando edito algunos campos pero no edito la imagen, pongo esto ...
puede reemplazar el texto
"skip creating photo thumbnail"
con"im just editing the description"
o un texto más formal.Espero que este ayude!
fuente
Consulte en la base de datos un registro existente con la misma PK. Compare los tamaños de archivo y las sumas de verificación de las imágenes nuevas y existentes para ver si son iguales.
fuente
Django 3: anulación de métodos de modelo predefinidos
fuente
En la nueva versión es así:
fuente
He encontrado otra forma simple de almacenar los datos en la base de datos
modelos.py
En la base de datos solo tengo 2 variables
views.py
En esto, he creado la instancia de model solo en views.py y colocando / guardando datos en 2 variables solo de vistas.
fuente