我有多个类,我有一些特殊的函数以较短的方式查询ndb,如下例所示:
class SomeModel(ndb.Model):
xcode = ndb.StringProperty('c')
descr = ndb.StringProperty('d')
client = ndb.KeyProperty('cl')
order = ndb.IntegerProperty('o')
mod = ndb.DateTimeProperty(auto_now=True)
@classmethod
def q_base(cls, ancestor):
return cls.query(ancestor=ancestor).order(cls.codigo)
函数q_base节省了一些空间,使得处理程序中的代码看起来更清晰。但由于相当多的模型需要这个确切的功能,我必须重复多次,这是一个问题。
我该如何解决?我可以只创建一个BaseClass(ndb.Model),在那里添加函数并使其他模型继承它吗?或者我必须使用PolyModel吗?那怎么样?另外,我很欣赏任何关于任何existsint实体会发生什么的见解。
答案 0 :(得分:1)
我没有使用GAE的经验,但除非他们做了一些非常奇怪的事情,否则规范的解决方案是使用继承自ndb.Model
的抽象基类 - 如果ndb
支持抽象模型类 - 或者一个混音:
class QBaseMixin(object):
@classmethod
def q_base(cls, ancestor):
return cls.query(ancestor=ancestor).order(cls.codigo)
class MyModel(ndb.Model, QBaseMixin):
# model code here