繁体   English   中英

Django不会更新ImageField路径

[英]Django doesn't update the ImageField path

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

我遵循了this ,它建议覆盖模型中的默认save()方法,而this则建议使用post_save signal两次保存新文件。

我当前的代码如下:

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信号post_save发生同样的情况,因为它不会更新移动文件的路径。 有什么建议么?

谢谢!

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)

在末尾。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM