如何在GAE中创建适用于不同Model类的函数?

时间:2017-04-10 14:23:37

标签: python google-app-engine app-engine-ndb

我有多个类,我有一些特殊的函数以较短的方式查询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实体会发生什么的见解。

1 个答案:

答案 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