Django での非画像フィールド変更時の画像サイズ変更のスキップ
Django モデルを保存する場合、特定のアクションのみを実行する必要がある場合があります。特定のフィールドが変更されたとき。画像フィールドが存在する場合、ユーザーはアップロードまたは更新時に画像のサイズを変更したいと思うかもしれませんが、説明などの他のフィールドのみが変更される場合はプロセスをスキップします。
問題:
提供された Django モデルでは、画像自体が変更されたかどうかに関係なく、save() メソッドは画像の再スケーリングを実行します。このアプローチは非効率的であり、不必要な計算が発生する可能性があります。
カスタム プロパティとセッターを使用した解決策:
1 つの解決策は、画像を制御するセッターを含むカスタム プロパティを導入することです。サイズ変更。以下に例を示します。
<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 if self._image_changed: # Perform image rescaling logic here, if necessary pass def get_image(self): return self._image image = property(get_image, set_image) def save(self, *args, **kwargs): if getattr(self, '_image_changed', True): super(Model, self).save(*args, **kwargs) # Perform image rescaling logic here (if implemented in `set_image`)</code>
このアプローチでは、_image という名前の実際の画像フィールドのラッパーとして機能する image という名前のカスタム プロパティを利用します。 set_image() メソッドは、_image フィールドに新しい値を割り当て、_image_changed フラグを True に設定するために使用されます。 _image_changed フラグは、画像の再スケーリングが必要かどうかを判断するために使用されます。
save() メソッドで、プログラムは _image_changed の値をチェックします。 True の場合、画像フィールドが変更されたと想定し、画像の再スケーリング ロジックを続行します。 _image_changed が False の場合、画像フィールドが変更されていないことを意味し、プログラムは画像の再スケーリング手順をスキップします。
以上がDjango モデルはカスタム プロパティを利用して、画像以外のフィールドの変更時に画像のサイズ変更をスキップできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。