我如何在 GAE 中创建适用于不同模型 类 的函数?
How can I create functions that work for different Model classes in GAE?
我有多个 类,我有多个 类 可以用更短的方式查询 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节省了一些space并使处理程序中的代码看起来更清晰。但是因为有相当多的模型需要这个确切的功能,我不得不重复多次,这是一个问题。
我该如何解决?我可以只创建一个 BaseClass(ndb.Model),在其中添加函数并让所有其他模型继承它吗?或者我必须为此使用 PolyModel 吗?那看起来怎么样?此外,我将不胜感激任何关于任何现有实体会发生什么的见解。
我没有使用 GAE 的经验,但除非他们做了一些非常奇怪的事情,否则规范的解决方案是使用继承自 ndb.Model
的抽象基础 class - 如果 ndb
支持抽象模型 classes - 或 mixin:
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
我有多个 类,我有多个 类 可以用更短的方式查询 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节省了一些space并使处理程序中的代码看起来更清晰。但是因为有相当多的模型需要这个确切的功能,我不得不重复多次,这是一个问题。
我该如何解决?我可以只创建一个 BaseClass(ndb.Model),在其中添加函数并让所有其他模型继承它吗?或者我必须为此使用 PolyModel 吗?那看起来怎么样?此外,我将不胜感激任何关于任何现有实体会发生什么的见解。
我没有使用 GAE 的经验,但除非他们做了一些非常奇怪的事情,否则规范的解决方案是使用继承自 ndb.Model
的抽象基础 class - 如果 ndb
支持抽象模型 classes - 或 mixin:
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