我有问题。我正在尝试使用FileField的upload_to属性更改文件上传的目录,但没有成功。
主要问题是我已经定义了一个带有文件属性的父类,我想更改子类的目录。
我的模型以这种方式定义:
class DocumentBase(models.Model):
file = models.FileField(upload_to=get_filename)
class Document(DocumentBase):
file_type = models.CharField(max_size=150)
我试图覆盖子类中的FileField,但没有成功(我现在知道这是不可能的。)
我也尝试了这个other question的答案(这与我的问题非常相似),没有成功。
有人可以帮我这个吗?谢谢!
答案 0 :(得分:1)
正如Willem所说,猴子修补upload_to
属性可以解决这个问题。但它对这种情况并不起作用。
深入研究FileField class definition,此课程还有另一个属性:generate_filename
。当upload_to
可调用时,将填充此属性。
此属性用于生成文件filename。
所以,有效的解决方案是:
class DocumentBase(models.Model):
file = models.FileField(upload_to=get_filename)
class Document(DocumentBase):
file_type = models.CharField(max_size=150)
Document._meta.get_field('file').generate_filename = other_get_filename
这种行为在Django 1.10上发生了变化。