gpt4 book ai didi

python - 优化Django模型保存方法获取上传文件路径

转载 作者:太空宇宙 更新时间:2023-11-03 11:29:22 24 4
gpt4 key购买 nike

在我的 Django 应用程序模型中,我需要在 save() 方法中访问 ImageField,以在保存整个模型实例之前提取一些 gps 信息并填充其他 MyModel 字段。

def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
if self.image:
# Todo: remove the double call of super(Photo, self).save() method by accessing the file before it will save
super(Photo, self).save(force_insert, force_update, using, update_fields)
image_file = gpsimage.open(self.image.path) #gpsimage.open needs a file path that I can have it only after I call super(Photo, self).save(....)
...
...
...
# Final save call
super(Photo, self).save(force_insert, force_update, using, update_fields)

是否可以访问临时文件(图像)路径,从中提取信息,然后,如果所有字段都有效,则保存整个模型?还有其他优雅的解决方案吗?

我当前的应用是一个 REST 和管理应用,所以我希望在一个中心模型中添加这个逻辑。

最佳答案

您可以通过自定义保存方法访问文件路径,如下所示:self.myimg.name,其中 myimg 是您的字段名称。

from django.db import models
import uuid
import os

def img_file_path(instance, filename):
''' Creates a filepath and name for an image file. '''
ext = filename.split('.')[-1]
filename = "%s.%s" % (uuid.uuid4(), ext)
today = datetime.date.today()
return os.path.join('imgs', '%s/%s/%s' % (today.year, today.month, today.day), filename)

class MyModel(models.Model):
myimg = models.ImageField(upload_to = img_file_path)

def save(self, *args, **kwargs):
path_of_file = self.myimg.name

# edit path_of_file, or whatever
self.myimg.name = path_of_file.upper()

super(MyModel, self).save()

如果你看一下the source code ,文件名在 __init__() 方法中确定,因此一旦创建对象(在保存和提交之前),您就可以访问它。

关于python - 优化Django模型保存方法获取上传文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25585217/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com