[英]Override Field attribute in Django Model
我有个问题。 我正在尝试使用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,但没有成功(我现在知道这是不可能的。)
我还尝试了另一个问题 (与我的问题非常相似)的答案,但没有成功。
有人可以帮我吗? 谢谢!
正如Willem所说,这可以解决猴子修补upload_to
属性的问题。 但这不适用于这种情况。
深入研究FileField类定义 ,该类具有另一个属性: generate_filename
。 可调用upload_to
时填充此属性。 此属性用于生成文件名。
因此,有效的解决方案是:
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上发生了变化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.