Python 保存ImageField mongoengine
我在mongoengine orm中有以下类定义:Python 保存ImageField mongoengine,python,tornado,mongoengine,Python,Tornado,Mongoengine,我在mongoengine orm中有以下类定义: import mongoengine as me class Description(me.Document): user = me.ReferenceField(User, required=True) name = me.StringField(required=True, max_length=50) caption = me.StringField(required=True, max_length=80)
import mongoengine as me
class Description(me.Document):
user = me.ReferenceField(User, required=True)
name = me.StringField(required=True, max_length=50)
caption = me.StringField(required=True, max_length=80)
description = me.StringField(required=True, max_length=100)
image = me.ImageField()
在我的tornado web requesthandler的帖子方法中:
from PIL import Image
def post(self, *args, **kwargs):
merchant = self._merchant
data = self._data
obj_data = {}
if merchant:
params = self.serialize() # I am getting params dict. NO Issues with this.
obj_data['name'] = params.get('title', None)
obj_data['description'] = params.get('description', None)
path = params.get('file_path', None)
image = Image.open(path)
print image # **
obj_data['image'] = image # this is also working fine.
obj_data['caption'] = params.get('caption', None)
obj_data['user'] = user
des = Description(**obj_data)
des.save()
print obj_data['image'] # **
print des.image # This is printing as <ImageGridFsProxy: None>
从PIL导入图像
def post(自我,*args,**kwargs):
商户=自身。\商户
数据=自身数据
obj_数据={}
如果商户:
params=self.serialize()#我得到的是params dict。没有问题。
对象数据['name']=params.get('title',无)
obj_数据['description']=params.get('description',None)
path=params.get('file_path',无)
image=image.open(路径)
打印图像#**
obj_数据['image']=image#这也可以正常工作。
obj_数据['caption']=params.get('caption',None)
obj_数据['user']=用户
des=说明(**obj_数据)
des.save()
打印obj_数据[“图像”]#**
打印des.image#这是作为
**打印对象数据['image']和打印图像打印如下:
<PIL.PngImagePlugin.PngImageFile image mode=1 size=290x290 at 0x7F83AE0E91B8>
但是
des.image仍然是空的
请告诉我这里出了什么问题
提前感谢大家。这样,您就不能将PIL对象放入带有
obj.image=image
的字段中。你必须做到:
des = Description()
des.image.put(open(params.get('file_path', None)))
des.save()
换句话说,
ImageField
应该在通过调用put
方法创建实例后用file对象填充。关于promo
的其他属性呢?他们还好吗?嗨,阿列克斯瓦塞尔,我又编辑了一遍。一些修正。宣传片实际上是描述。道歉。休息好了。