ファイル名もファイル名へのフルパスなしで保存する必要があります。私はそうしています:
class Photo(models.Model):
photo = models.ImageField(upload_to = settings.PATH_PHOTOS_SOURCE)
user = models.ForeignKey(UserProfile, editable=False)
item = models.ForeignKey(Item, default=0)
filename = models.CharField(max_length=100, default='', editable=False)
def save(self, *args, **kwargs):
self.filename = os.path.basename(self.photo.url)
super(Photo, self).save(*args, **kwargs)
それはうまくいきますが、既存の名前のファイルが既に存在し、オフコースでディスクにファイルexample_1.jpg、example_2.jpgを書き込みますが、ファイル名に間違ったファイル名example.jpgを保存する場合があります
保存方法を次のように変更しました。
def save(self, *args, **kwargs):
super(Photo, self).save(*args, **kwargs)
self.filename = os.path.basename(self.photo.url)
super(Photo, self).save()
それはうまくいきましたが、私はこのコードが好きではありません。おそらくもっとエレガントなコードです。
シグナルでこれをやろうとしましたが、再帰の保存に問題がありました。