0

別のモデルへの ObjectIdField を含むモデルがある場合、通常は (django) を使用しpropertyてゲッターを作成し、参照は使用時に透過的になります。そのようです:

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'

私はこれを正しい方法で行っていますか?

4

1 に答える 1

0

ここで自分の質問に答えます。私の間違いは、プロパティの宣言ではなく、関数自体にあったようです。session代わりにa を使用すると、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
于 2014-12-16T18:14:42.743 に答える