保存ImageField mongoengine

时间:2012-12-13 09:07:54

标签: 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)
    description = me.StringField(required=True, max_length=100)
    image = me.ImageField()

在我的龙卷风web requesthandler的post方法中:

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>

** print obj_data ['image']和打印图像正在打印:

<PIL.PngImagePlugin.PngImageFile image mode=1 size=290x290 at 0x7F83AE0E91B8>

但是

  

des.image仍然没有。

请告诉我这里有什么问题。

提前感谢所有人。

1 个答案:

答案 0 :(得分:3)

您不能将PIL对象放入obj.image = image这样的字段中。你必须这样做:

des = Description()
des.image.put(open(params.get('file_path', None)))
des.save()

换句话说,在通过调用ImageField方法创建实例后,put应填充文件对象。