Remplacement de la sauvegarde du modèle Django pour des cas spécifiques
Dans Django, la méthode save() dans les modèles est responsable de la persistance des données dans la base de données. Cependant, il existe des scénarios dans lesquels vous souhaiterez peut-être modifier ce comportement en fonction de critères spécifiques. Un de ces cas est le redimensionnement d'une image uniquement lorsqu'elle est nouvellement ajoutée ou mise à jour.
Problème :
Dans un modèle avec des champs pour l'image, le pouce et la description, vous besoin de redimensionner et de stocker une vignette (pouce) uniquement si l'image principale (image) est créée ou modifiée. La mise à jour du champ de description ne devrait pas déclencher le redimensionnement de l'image.
Solution :
Pour y parvenir, vous pouvez remplacer la méthode save() par défaut en utilisant une propriété personnalisée qui vérifie pour les modifications dans le champ image :
<code class="python">class Model(model.Model): _image = models.ImageField(upload_to='folder') thumb = models.ImageField(upload_to='folder') description = models.CharField() def set_image(self, val): self._image = val self._image_changed = True def get_image(self): return self._image image = property(get_image, set_image) def save(self, *args, **kwargs): if getattr(self, '_image_changed', True): small = rescale_image(self.image, width=100, height=100) self.thumb = SimpleUploadedFile(name, small_pic) super(Model, self).save(*args, **kwargs)</code>
Comment ça marche :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!