Python 保存ImageField mongoengine

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)

我在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)
    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
的其他属性呢?他们还好吗?嗨,阿列克斯瓦塞尔,我又编辑了一遍。一些修正。宣传片实际上是描述。道歉。休息好了。