【问题标题】:How can I create functions that work for different Model classes in GAE?如何在 GAE 中创建适用于不同模型类的函数?
【发布时间】:2017-04-10 14:23:37
【问题描述】:

我有多个类,我有一些特殊的函数可以以更短的方式查询 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 吗?那看起来怎么样?另外,如果您能了解任何现有实体会发生什么情况,我将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    我对 GAE 没有经验,但除非他们做一些非常奇怪的事情,否则规范的解决方案是使用继承自 ndb.Model 的抽象基类 - 如果 ndb 支持抽象模型类 - 或 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
    

    【讨论】:

    • 虽然多重继承需要使用 PolyModel,但如果我只创建一个从 ndb.Model 继承的 BaseClass,然后让其他类从该基类继承,它就可以工作。到目前为止,一切都按预期工作,谢谢!
    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多