MongoAlchemy ObjectIdField解析

时间:2014-12-16 06:36:31

标签: python mongoalchemy

如果我有一个包含ObjectIdField的Model到另一个模型,我通常会(django)使用property来创建一个getter,并且引用在使用中是透明的。像这样:

class Image(db.Document):
    name_full  = db.StringField(required=True)
    name_thumb = db.StringField(required=False)
    source     = db.StringField(required=False)

class Product(db.Document):
    name        = db.StringField()
    description = db.StringField(required=False)
    image_id    = db.ObjectIdField(required=False)

    def _get_image(self):
        try:
            return db.query(Image).filter(mongo_id=self.image_id)[0]
        except IndexError:
            return None
    image = property(_get_image)

尽管实际上我在尝试从模板访问时遇到此错误:

<img src="{{ url_for('static', filename='images/products/'+product.image.name_thumb) }}">

UndefinedError: 'app.models.Product object' has no attribute 'image'

我能以正确的方式解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

在这里回答我自己的问题。似乎我的错误在于函数本身,而不是属性的声明。我使用session代替db后就开始工作了。我还将属性声明缩短为仅使用@property

from mongoalchemy.session import Session
session = Session.connect('flask-test')

....

    @property
    def image(self):
        try:
            return session.query(Image).filter({"mongo_id":self.image_id})[0]
        except IndexError:
            return None