我正在测试以下对象:
pk = ndb.Key(League, 'Premier League', 'Season', '2012/13')
o = Team(
id = 'Chelsea',
name ='Chelsea',
leagues = [
TeamInLeague(
parent = pk,
position = 1,
),],
)
o.put()
并且以下测试在AssertionError: 0 != 1
上失败:
我还尝试了以下测试:
q = Team.query(TeamInLeague(ancestor=pk))
self.assertEqual(q.count(), 1)
它在AttributeError: type object 'TeamInLeague' has no attribute 'ancestor'
上失败。在
有没有方法可以按结构化属性的父级进行查询?还是我做错了?我从the docs了解到我在创建时添加父属性。在
你不能用祖先关系来做你想做的事。在
事实上,您在创建团队类时并不提供父键。我猜你想用联盟对象作为父对象来创建团队对象吗?在
应该是这样的:
但是,像这样的话,你的数据模型会有一个缺陷。团队班将永远与联盟联系在一起。由于联赛显然有一个赛季,你的球队下赛季将无法进入。在
最好使用多对多关系,因为您已经在示例代码中开始了。这将涉及到创建一个helper类TeamInLeague,正如您已经做的那样。然后,您可以使用普通查询(而不是祖先查询)来确定哪个团队属于哪个联盟。但是,在本例中,我会考虑创建一个特殊的TeamInLeague类。这在概念上比使用重复属性(尤其是重复的结构化属性)更干净。在
另外,不需要在构造函数中指定所有对象属性。这不是jQuery。在许多情况下,在创建对象之后和put()之前创建对象关系更具可读性。在
您的代码如下所示:
^{pr2}$相关问题 更多 >
编程相关推荐