Quand remplacer l'enregistrement du modèle Django pour le redimensionnement de l'image

Mary-Kate Olsen
Libérer: 2024-10-22 21:09:03
original
410 Les gens l'ont consulté

When to Override Django Model Saving for Image Resizing

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>
Copier après la connexion

Comment ça marche :

  • La méthode set_image() met à jour le champ _image et définit un indicateur _image_changed sur True.
  • La méthode get_image() renvoie la valeur actuelle du champ _image.
  • La propriété image enveloppe à la fois les méthodes set_image() et get_image() pour fournir une interface cohérente.
  • Dans la méthode save() remplacée, l'indicateur _image_changed est vérifié. Si c'est True, cela signifie que l'image a été modifiée ou ajoutée.
  • Dans ce cas, la vignette est redimensionnée.
  • La méthode super() est appelée pour enregistrer le modèle dans la base de données avec la vignette redimensionnée (si nécessaire) et la description mise à jour.

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!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!