1

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リクエストハンドラーの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'] と print image は次のように印刷されます:

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

しかし

des.image はまだ None のままです。

ここで何が間違っているのか教えてください。

すべてに前もって感謝します。

4

1 に答える 1

3

その方法で PIL オブジェクトをフィールドに入れることはできませんobj.image = image。次のことを行う必要があります。

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

つまり、メソッドImageFieldを呼び出してインスタンスを作成した後、ファイル オブジェクトで満たす必要がありますput

于 2012-12-13T09:31:23.947 に答える