0

私はこのような2つのモデルを持っています:

class A(db.Model):
    propertyA = db.XxxProperty(required=True)

class B(db.Model):
    reference = db.ReferenceProperty(A,collection_name='Bs',required=Ture)
    propertyB = db.XxxProperty(required=True)

ここで、すべてのAsusingテンプレートの情報を表示したいと思います。Pythonファイルでは、次のことを行います。

As = A.all().filter('propertyA =', XXX).fetch(10)

次のように、テンプレートにAsを渡します。

{% for a in As%}
    {{a.propertyA}}
    *****SHOW EVERY B THAT a HAS*****
{% endfor%}

ここに問題があります。各Aには多くのBが含まれている可能性があり、次のようなものが必要です。

a_has_these_Bs = a.BS
for b in a_has_these_Bs:
    b.propertyB

しかし、どうすれば上記のクエリをテンプレートに入れることができますか?私の意図を実行する他の方法はありますか?

ありがとうございました!

4

2 に答える 2

3

それcollection_nameが目的です。Aプロパティがあります。これは、を参照するオブジェクトをBs返すクエリです。BA

だから、あなたはのようなものが欲しいのですが{% for b in a.Bs %}、私はそれをテストするのに便利なものは何もありません。

于 2012-05-04T14:24:27.787 に答える
1

@property関数を使用できます

class A(db.Model):
    propertyA = db.XxxProperty(required=True)

    @property
    def has_these_bs(self):
        objs = B.all().filter('reference =', self)
        return [b for b in objs]

class B(db.Model):
    reference = db.ReferenceProperty(A,collection_name='Bs',required=Ture)
    propertyB = db.XxxProperty(required=True)

次に、テンプレートで:

for b in a.has_these_Bs:
    b.propertyB

もちろん、B.all().filter('reference =', self)それを実行してからそのクエリをループするのは最善の解決策ではありません。B.all().filter('reference =', self).fetch(500)エンティティAが持つBの数や、エンティティAが持つことができる最大数がわかっている場合など、結果を取得する方がはるかに優れています。

于 2012-05-04T14:52:12.013 に答える