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

Django: Saving file to specific location

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

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 调用应用名称,但在保存时,创建的文件名为 'None'。我将如何解决这个问题。

如果 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)