Хочу провернуть такое дело. В upload_to вбить путь с id объекта. Но когда объект первый раз сохраняется, этот id в None, и получается фигня. По этому я написал следующий фокус:
from django.db.models import FileField as DjFileField
class FileField(DjFileField):
# блокирую сохранение
def pre_save(self, model_instance, add):
return getattr(model_instance, self.attname)
# генератор пути к файлу
def generate_filename(self, instance, filename):
return os.path.join(self.upload_to,
str(instance.id),
self.get_filename(filename))
class ItemImage(models.Model):
file = ImageField(upload_to="uploads")
def save(self, *args, **kwargs):
super(ItemImage, self).save(*args, **kwargs)
if self.file:
# генерирую имя и повторно сохраняю
self.file.name = self.file.field.generate_filename(self, self.file.name)
self.file.save(self.file.name, self.file, save=False)
ItemImage.objects.filter(id=self.id).update(file=self.file)
Жуткова-то получается. Как бы это сделали вы?