同じバグに遭遇しました。
このバグの原因: この StdImage インスタンスが .thumbnail フィールドを初期化するたびに、self.generate_filename
そのファイル名を取得するために呼び出し、次に「.thumnail」をサムネイルの名前としてファイル名に挿入します。
ソース:
def _set_thumbnail(self, instance=None, **kwargs):
"""Creates a "thumbnail" object as attribute of the ImageField instance
Thumbnail attribute will be of the same class of original image, so
"path", "url"... properties can be used
"""
if getattr(instance, self.name):
filename = self.generate_filename(instance,
os.path.basename(getattr(instance, self.name).path))
thumbnail_filename = self._get_thumbnail_filename(filename)
thumbnail_field = ThumbnailField(thumbnail_filename)
setattr(getattr(instance, self.name), 'thumbnail', thumbnail_field)
パスが動的でない場合は正しいです。しかし、 などの動的パスを使用するとheadimg = models.FileField(upload_to='headimg/%Y%m')
、 の戻り値self.generate_filename
が今日の日付に対応するため、thumbnail.path は毎日変更されます。
クイックフィックス:
stdimage/fields/py のソースで
def _set_thumbnail(self, instance=None, **kwargs):
"""Creates a "thumbnail" object as attribute of the ImageField instance
Thumbnail attribute will be of the same class of original image, so
"path", "url"... properties can be used
"""
if getattr(instance, self.name):
#fix the bug of wrong thumbnail path
#filename = self.generate_filename(instance,
# os.path.basename(getattr(instance, self.name).path))
file_path = getattr(instance, self.name).path
file_prefix = self.upload_to[:self.upload_to.find('/')]
filename = file_path[file_path.find(file_prefix):]
thumbnail_filename = self._get_thumbnail_filename(filename)
thumbnail_field = ThumbnailField(thumbnail_filename)
setattr(getattr(instance, self.name), 'thumbnail', thumbnail_field)
わたしにはできる。
github の stdimage プロジェクトに問題を提出しました。作者が修正してくれることを願っています。