0

我有两个模型,像这样:

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)

现在,我想使用模板显示所有 As 的信息。在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,它是一个返回那些B引用的对象的查询A

所以你想要类似的东西{% 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 或它可以拥有的最大数量,那么获取结果会好得多。

于 2012-05-04T14:52:12.013 回答