我正在处理一个由其他人编写(并放弃)的大型项目,并且需要一种方法来每次调用 .all() 以检查我添加的特定模型的布尔值。在整个项目中实际上有数千个调用,所以我一直在寻找一种方法来避免全部重写它们。
我的想法是覆盖 .all() 方法,使用过滤器调用父级 .all() 。这是我第一次使用 Google App Engine,所以我做了很多猜测工作。
我想我可以从这样的事情开始:
class Bob(polymodel.PolyModel):
stuff = db.StringProperty()
active = db.BooleanProperty(default=False)
def all(self, keys_only=False):
super(Bob,self).all()
但是当我尝试这样打电话时:
joes = Bob.all()
for joe in joes:
self.response.write(joe.active)
我明白了:
类型错误:必须以 Bob 实例作为第一个参数调用未绑定的方法 all()(什么都没有)
这是我在 stackoverflow 上的第一篇文章,所以我希望我做得正确。任何帮助将不胜感激。
解决方案(稍后添加)
class Bob(db.Model):
stuff = db.StringProperty()
active = db.BooleanProperty(default=False)
@classmethod
def all(cls, keys_only=False):
if keys_only == True:
qry = super(Bob,cls).all(keys_only=True)
qry.filter('active =', True)
return qry
else:
qry = super(Bob,cls).all(keys_only=False)
qry.filter('active =', True)
return qry