我有两个模型,如下:
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
但是如何将查询内容放入模板中呢? 有没有其他方法可以实现我的意图?
谢谢!
答案 0 :(得分:3)
这就是collection_name
的用途。 A
有一个属性Bs
,这是一个返回引用B
的{{1}}个对象的查询。
所以你想要像A
这样的东西,虽然我没有任何方便的东西来测试它。
答案 1 :(得分: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)
然后遍历该查询的最佳解决方案。如果您知道实体A有多少B或者它可能拥有的最大数量,那么获取像B.all().filter('reference =', self).fetch(500)
这样的结果会好得多。