gpt4 book ai didi

python - 以编程方式将图像保存到 Django ImageField 正在创建图像的无限循环

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

我在一个看起来像这样的模型上有一个save方法:

def save(self, force_insert=False, force_update=False):
img_url = "http://example.com/%s.jpg" % (self.title)
name = urlparse(img_url).path.split('/')[-1]
content = urllib.urlretrieve(img_url)
self.image.save(name, File(open(content[0])), save=True)
super(Test, self).save(force_insert, force_update)

出于某种原因,这会创建无限循环的图像创建,文件名中的 _ 会越来越多。当我收到一个 Django 错误,提示它试图保存的文件有太多字符(我发现保存了 242 张图像)时,我终于弄清楚它是这样做的。

我试图使用来自 this question 的信息.

知道这里发生了什么吗?

最佳答案

我认为通过浏览源代码调用 ImageFileField.save() (实际上是 FileField.save() 由于继承)导致实例(即db row) 待更新的文件名所在的行。

这意味着在您的 save 方法中,您调用了 ImageFileField.save(),后者又调用了您的 save 方法,从而导致递归。

从阅读源代码来看,如果你想避免这种情况,只需将save=False传递给self.image.save即可。这会将文件数据保存到磁盘,但不会保存实例(数据库行)数据。然而,在下一行中,您通过调用父类(super class)来保存它,所以我认为它会被保存到数据库中。

事实上,save 方法中的 save=False 似乎旨在帮助处理这种情况!

关于python - 以编程方式将图像保存到 Django ImageField 正在创建图像的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1736550/

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