pythonDjango:如何上传基于实例p的文件名

2024-06-28 11:14:30 发布

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

我有一个我认为很简单的问题。在我的模型中我有一个models.ImageField看起来像这样:

class CMSDocument(BaseItem):
    thumb = models.ImageField(upload_to= './media/',blank=True)

但是我想把它上传到'.media/' + self.pk+ '.png'我试图在模型的save方法中更新字段,但是这不起作用,因为调用'save'时pk未知。我还尝试添加一个自定义函数用于upload\u to,如下所示:Django: Any way to change "upload_to" property of FileField without resorting to magic?。但这只会让这个领域空无一人。我能做什么?在

编辑:我使用django1.6

编辑:我用了一个不太好的post_save信号:

^{pr2}$

Tags: to模型true编辑modelssavemediaclass
1条回答
网友
1楼 · 发布于 2024-06-28 11:14:30

主键是由数据库分配的,所以您必须等到模型行保存在数据库中。在

首先将数据分为两个模型,并在子模型上显示缩略图:

from django.db import models

from .fields import CMSImageField


class CMSDocument(models.Model):
    title = models.CharField(max_length=50)


class CMSMediaDocument(CMSDocument):
    thumb = CMSImageField(upload_to='./media/', blank=True)

如您所见,我对缩略图使用了自定义字段,而不是ImageField。在

因此,创建一个字段.py应重写ImageField继承的FileField类的pre_save函数的文件:

^{pr2}$

因为cmsmediadadocument是从CMSDocument类继承的,所以在调用pre_save时,渐进式PK已经保存在数据库中,因此您可以从model\u instance中提取PK。在

我测试了代码,应该可以正常工作。在

测试中使用的管理文件:

from django.contrib import admin

from .models import CMSMediaDocument

admin.site.register(CMSMediaDocument)

相关问题 更多 >