作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试替换将在我的模型中为某个 ImageField 上传的图像。现在我的模型是这样的:
class Image(models.Model):
image = models.ImageField(upload_to='images/')
def save(self, *args, **kwargs):
# some resizing here which works fine
'images/'
目录(因为我有不同的图像类型需要进入
/media
的不同子目录),最终会变成
'/media/images/'
由于我的 settings.py 中的这个设置:
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
@receiver(pre_save, sender=Image)
def file_update(sender, **kwargs):
instance = kwargs['instance']
print(instance.image.path) ### HERE IS THE PROBLEM
if instance.image:
path = instance.image.path ### HERE IS THE PROBLEM
os.remove(path)
/home/.../media/images/file.jpg
/home/.../media/file.jpg
No such file or directory
错误。我错过了什么?
path = instance.image.path
name = instance.image.name
correct_path = path.replace(name, 'images/' + name)
instance = kwargs['instance']
if instance.id is not None:
current_image = Image.objects.filter(id=instance.id)[0]
print(current_image.image.path) ### WORKS FINE
os.remove(current_image.image.path) ### WORKS FINE
最佳答案
正如 Abhyudai 指出的那样:您的“问题”仅出现在 pre_save
中.在 post_save
你得到了正确的路径。我怀疑只有在实际保存文件时才会生成正确的“路径”(在保存模型之前,它尚未写入最终目的地。
但是,您仍然可以在 pre_save 中访问所需的数据:
媒体目录的绝对路径:
instance.image.storage.base_location # /home/.../media
instance.image.field.upload_to # images/
.field
因为我们想要字段而不是
FieldFile
通常返回
instance.image.name
关于python - 获取在 django 中使用 "upload_to"的上传媒体文件的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59521479/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!