【发布时间】:2023-03-22 12:48:01
【问题描述】:
我有一个我认为很简单的问题。在我的模型中,我有一个 models.ImageField,看起来像这样:
class CMSDocument(BaseItem):
thumb = models.ImageField(upload_to= './media/',blank=True)
但我想将其上传到'.media/' + self.pk+ '.png' 我尝试更新模型的保存方法中的字段,但这不起作用,因为调用“保存”时不知道 pk。我还尝试按照此处的建议为 upload_to 添加自定义函数:Django: Any way to change "upload_to" property of FileField without resorting to magic?。但这只会使该领域空无一人。我能做什么?
编辑:我使用 Django 1.6
编辑:我使用了一个不是很好的 post_save 信号:
def video_embed_post_save(sender, instance=False, **kwargs):
document = DocumentEmbedType.objects.get(pk=instance.pk)
new_thumb = "media/%s.png" % (document.pk,)
if not document.thumb == new_thumb:
document.thumb = new_thumb
document.save()
...
【问题讨论】:
-
一种非常hackish的方法是,在save方法中,获取最后一条记录的id,然后将其加一并用作新的id。
-
hmmm,我实际上最终使用了一个 post_save 信号,这有点像 hack(我检查文件名是否已经正确,如果不是,我更改它并保存模型。这样我不要遇到递归问题)。但我会检查@madzohan 解决方案。