重写Django Mod中的字段属性

2024-10-03 06:26:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有个问题。我试图使用FileField的upload_-to属性更改上载文件的目录,但没有成功。在

主要的问题是我定义了一个父类,带有一个file属性,我想更改子类上的目录。在

我的模型是这样定义的:

class DocumentBase(models.Model):
    file = models.FileField(upload_to=get_filename)


class Document(DocumentBase):
    file_type = models.CharField(max_size=150)

我试图重写子类中的FileField,但没有成功(我现在意识到这是不可能的)

我也尝试了这个other question(这与我的问题非常相似)的答案,但没有成功。在

有人能帮我吗?谢谢!在


Tags: 文件to模型目录model属性定义models
1条回答
网友
1楼 · 发布于 2024-10-03 06:26:41

正如Willem所说,这可以通过猴子修补upload_to属性来解决。但这个案子没用。在

深入研究FileField class definition,这个类有另一个属性: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

这种行为在django1.10上发生了变化。在

相关问题 更多 >