画像のサイズ変更のために Django モデル保存をオーバーライドする場合

Mary-Kate Olsen
リリース: 2024-10-22 21:09:03
オリジナル
410 人が閲覧しました

When to Override Django Model Saving for Image Resizing

特定の場合の Django モデル保存のオーバーライド

Django では、モデルの save() メソッドがデータをデータベースに永続化する役割を果たします。ただし、特定の基準に基づいてこの動作を変更する必要があるシナリオもあります。そのようなケースの 1 つは、画像が新しく追加または更新された場合にのみ画像を再スケーリングすることです。

問題:

画像、サム、および説明のフィールドを持つモデルでは、メイン画像 (画像) が作成または変更された場合にのみ、サムネイル (サムネイル) のサイズを変更して保存する必要があります。説明フィールドを更新しても、画像のサイズ変更はトリガーされません。

解決策:

これを実現するには、チェックするカスタム プロパティを使用して、デフォルトの save() メソッドをオーバーライドします。画像フィールドの変更:

<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>
ログイン後にコピー

仕組み:

  • set_image() メソッドは、_image フィールドを更新し、フラグ _image_changed を次のように設定します。 True。
  • get_image() メソッドは、_image フィールドの現在の値を返します。
  • image プロパティは、set_image() メソッドと get_image() メソッドの両方をラップして、一貫したインターフェイスを提供します。
  • オーバーライドされた save() メソッドでは、_image_changed フラグがチェックされます。 True の場合、画像が変更または追加されたことを意味します。
  • その場合、サムネイルは再スケールされます。
  • super() メソッドが呼び出され、モデルをデータベースに保存します。サイズ変更されたサムネイル (必要な場合) と更新された説明。

以上が画像のサイズ変更のために Django モデル保存をオーバーライドする場合の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!