Django: сохранение файла в определенном месте

Я пытаюсь найти способ сохранить файл в определенном месте каждый раз, когда он загружен. Вот модели, с которыми я работаю.

class App(models.Model):
    name = models.CharField(max_length=20)
    description = models.CharField(max_length=20)

     def save(self, *args, **kwargs):
         new_media_root = os.path.join(settings.MEDIA_ROOT, self.name)
         os.mkdir(new_media_root)
     super(App, self).save(self, *args, **kwargs)

class Page(models.Model):
    title = models.CharField(max_length=20)
    app = models.ForeignKey(App)
    file = model.FileField(upload_to=app.name)

Из приведенного выше фрагмента кода я пытаюсь добиться того, чтобы для каждого созданного приложения дочерние страницы сохраняли файлы в определенном месте приложения. Вызывал имя приложения с помощью upload_to = app.name, но при сохранении созданный файл называется "Нет". Как бы я получил об этом решить.

1 ответ

Решение

Если upload_to вызывается, перезаписать generate_filename функция.

def generate_filename(self, instance, filename):
    directory_name = os.path.normpath(force_unicode(datetime.datetime.now().strftime(smart_str(self.app.name))))
    return os.path.join(directory_name, self.get_filename(filename))

class Page(models.Model):
    title = models.CharField(max_length=20)
    app = models.ForeignKey(App)
    file = model.FileField(upload_to=generate_filename)
Другие вопросы по тегам