2015-11-26 3 views
0

Я пытаюсь найти способ сохранить файл в определенном месте при каждом его загрузке. Вот модели, с которыми я работаю.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, но при сохранении созданный файл называется «Нет». Как я могу это решить.

ответ

2

Если 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)