简体   繁体   中英

save ImageField mongoengine

I have following class definition in 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()

in my post method of my 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>

** print obj_data['image'] and print image are printing following:

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

but

des.image still remains None.

Please suggest me what is wrong here.

Thanks in advance to all.

You can not just put PIL objects into a field with obj.image = image that way. You must do:

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

In other words, ImageField should be filled with file object after creating an instance by calling put method.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM