Django不会更新ImageField路径

时间:2018-01-18 11:11:50

标签: python django django-models

我正在尝试在创建模型实例时上传个人资料图片。我希望我的个人资料图片存储在一个文件夹中,该文件夹根据实例ID命名,因此一旦图片上传,我需要创建一个新的目录并将图片移动到那里。

我关注this,建议覆盖模型中的默认save()方法,this建议使用post_save signal两次保存新文件。< / p>

我目前的代码如下:

class Emp(models.Model):
    photo = models.ImageField("Photo", blank=True, null=True, default='default_avatar.png')

    def save(self, *args, **kwargs):

        # Call standard save
        super(Emp, self).save(*args, **kwargs)

        if self.photo.path:
            initial_path = self.photo.path

            new_path = os.path.join(settings.MEDIA_ROOT,
                                'profile_picture_of_emp_{0}/{1}'.format(self.pk, os.path.basename(initial_path)))

            # Create dir if necessary and move file
            if not os.path.exists(os.path.dirname(new_path)):
                os.makedirs(os.path.dirname(new_path))
            os.rename(initial_path, new_path)
            # Save changes
            super(Emp, self).save(*args, **kwargs)

因此,这实际上会移动文件并正确创建new_path,但self.photo.path静止图片指的是旧位置,我无法找到更新此新路径的方法。 post_save信号也会发生同样的情况,因为它不会更新已移动文件的路径。有什么建议吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

添加

my_new_path = 'profile_picture_of_emp_{0}/{1}'.format(self.pk, os.path.basename(initial_path))
self.photo = my_new_path;
super(Emp, self).save(*args, **kwargs)

最后。