我试图找到一种方法,每次上传时都将文件保存在特定位置。以下是我正在使用的模型。
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调用应用程序名称,但在保存时,创建的文件称为“无”。我将如何解决这个问题。
答案 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)