Django:将文件保存到特定位置

时间:2015-11-26 15:26:34

标签: python django django-models django-file-upload

我试图找到一种方法,每次上传时都将文件保存在特定位置。以下是我正在使用的模型。

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 个答案:

答案 0 :(得分: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)