通过Django shell保存图像/文件

34

我正在尝试通过Django shell保存一张图片文件。

我的model.py如下:

class user(models.Model):
    name = models.CharField(max_length=20)
    pic = models.ImageField()

管理员和表单都很好,但我想使用shell保存图像:

类似这样的东西

>>> user1 = User(name='abc', pic="what to write here")

https://dev59.com/ZnM_5IYBdhLWcg3wyWSt - catherine
3个回答

69
from django.core.files import File

user1=User(name='abc')
user1.pic.save('abc.png', File(open('/tmp/pic.png', 'r')))

最终会在ImageField指定的upload_to目录中复制名为abc.png的图片。

在这种情况下,user1.pic.save 方法也会保存 user1 实例。有关保存ImageField的文档可以在这里找到:https://docs.djangoproject.com/en/dev/ref/files/file/


1
我尝试使用这种方法保存PNG文件,但出现了以下错误:codecs.charmap_decode(input,self.errors,decoding_table)[0]odeError: 'charmap' codec can't decode byte 0x8f in position 207: char to <undefined> 你知道如何解决吗? - AllTradesJack
5
根据Roy下面的回答,@AllTradesJack应该使用'rb'标志而不是'r'标志。 - khue bui

35
from django.core.files import File
user1=User(name='abc')
user1.pic.save('abc.png', File(open('/tmp/pic.png', 'rb')))

如果您在使用Python3,请使用'rb'代替'r'。


9
这应该是对原回答的评论。 - dwlz

1
我成功的方法是:
django.core.files.uploadedfile import UploadedFile
user1=User(name='abc')
user1.pic.save('abc.png', UploadedFile(file=open('/tmp/pic.png', 'rb'), content_type='image/png'))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接