我在模型上有一个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)
Run Code Online (Sandbox Code Playgroud)
由于某种原因,这会创建一个无限循环的图像创建,_文件名中的 s 越来越多。当我收到 Django 错误时,我终于发现它正在这样做,该错误说它试图保存的文件包含太多字符(我发现保存了 242 个图像)。
我试图使用这个问题中的信息。
知道这是怎么回事吗?
我认为通过浏览源代码,调用ImageFileField.save()(实际上FileField.save()是由于继承)会导致存储文件名的实例(即数据库行)被更新。
这意味着在你的save方法中你调用ImageFileField.save()中,该方法又调用您的保存方法,从而导致递归。
通过阅读源代码,如果你想阻止这种情况,那么只需传递save=False到self.image.save. 这会将文件数据保存到磁盘,但不会将save实例(数据库行)数据保存到磁盘。然而,在下一行中,您通过调用超类来保存它,所以我认为它将被保存到数据库中。
事实上,看起来该save=False方法save就是为了帮助解决这种情况而设计的!
| 归档时间: |
|
| 查看次数: |
981 次 |
| 最近记录: |