Avant d'enregistrer le modèle, je redimensionne une image. Mais comment puis-je vérifier si une nouvelle image a été ajoutée ou simplement une description mise à jour, afin de pouvoir ignorer le redimensionnement à chaque fois que le modèle est enregistré?
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)
Je souhaite redimensionner uniquement si une nouvelle image est chargée ou une image mise à jour, mais pas lorsque la description est mise à jour.
Réponses:
Quelques idées:
Je ne sais pas si cela fonctionnerait bien avec tous les outils pseudo-automatiques de django (Exemple: ModelForm, contrib.admin etc).
la source
Vérifiez le champ pk du modèle. Si c'est None, alors c'est un nouvel objet.
Edit: J'ai ajouté un chèque pour 'image' dans form.changed_data. Cela suppose que vous utilisez le site d'administration pour mettre à jour vos images. Vous devrez également remplacer la méthode save_model par défaut comme indiqué ci-dessous.
la source
Vous pouvez fournir un argument supplémentaire pour confirmer qu'une nouvelle image est publiée.
Quelque chose comme:
ou passer la variable de demande
Je pense que ceux-ci ne casseront pas votre sauvegarde lorsqu'ils sont appelés simplement.
Vous pouvez le mettre dans votre admin.py afin que cela fonctionne également avec le site d'administration (pour la deuxième des solutions ci-dessus):
la source
Ce que j'ai fait pour atteindre mon objectif était de faire cela.
et en dessous de la méthode save () se trouve ceci.
donc quand je modifie certains champs mais que je ne modifie pas l'image, je mets ceci ..
vous pouvez remplacer le
"skip creating photo thumbnail"
par"im just editing the description"
ou un texte plus formel.J'espère que celui-ci vous aidera!
la source
Recherchez dans la base de données un enregistrement existant avec le même PK. Comparez les tailles de fichier et les sommes de contrôle des images nouvelles et existantes pour voir si elles sont identiques.
la source
Django 3: Remplacer les méthodes de modèle prédéfinies
la source
Dans la nouvelle version, c'est comme ça:
la source
J'ai trouvé un autre moyen simple de stocker les données dans la base de données
models.py
Dans la base de données, je n'ai que 2 variables
views.py
En cela, j'ai créé l'instance de modèle dans views.py uniquement et mettre / enregistrer des données dans 2 variables à partir de vues uniquement.
la source