【问题标题】:AttributeError: 'file' object has no attribute '_committed' . Renaming image django modelsAttributeError: 'file' 对象没有属性 '_committed' 。重命名图像 django 模型
【发布时间】:2017-08-31 03:19:23
【问题描述】:

我正在使用requests通过链接下载图像并将它们保存到模型中

f = open('00000001.jpg','wb')
f.write(requests.get('http://www.gunnerkrigg.com//comics/00000001.jpg').content)
event.image = f
f.close()

event.save() 发生错误:

    Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/Users/TheKotik/tick-tock2/denv/lib/python2.7/site-packages/django/db/models/base.py", line 734, in save
    force_update=force_update, update_fields=update_fields)
  File "/Users/TheKotik/tick-tock2/denv/lib/python2.7/site-packages/django/db/models/base.py", line 762, in save_base
    updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
  File "/Users/TheKotik/tick-tock2/denv/lib/python2.7/site-packages/django/db/models/base.py", line 824, in _save_table
    for f in non_pks]
  File "/Users/TheKotik/tick-tock2/denv/lib/python2.7/site-packages/django/db/models/fields/files.py", line 312, in pre_save
    if file and not file._committed:
AttributeError: 'file' object has no attribute '_committed'

用 Google 搜索了一段时间,发现使用 id 命名图像的方法可能有问题,但无法真正理解到底是什么错误以及原因

def get_image_path(instance, filename):
    return 'event_img/{0}'.format(instance.event.id)

class Event(models.Model):
    image = models.ImageField(upload_to=get_image_path)

【问题讨论】:

    标签: python django database django-models


    【解决方案1】:

    你应该看看FieldFile.save(),但基本上你可以做到以下几点:

    from django.core.files import File
    ...
    event.image.save(f.name, File(f))
    

    【讨论】:

      猜你喜欢
      • 2016-08-05
      • 2023-03-12
      • 1970-01-01
      • 2015-11-29
      • 2012-04-26
      • 1970-01-01
      • 2018-12-17
      • 2017-01-12
      • 1970-01-01
      相关资源
      最近更新 更多