2017-04-10 53 views
0

我有多個類,我有在這個例子中查詢NDB在較短的方式,如特殊功能:如何創建適用於GAE中不同Model類的函數?

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?那看起來怎麼樣?另外,如果有任何現存實體會發生什麼情況,我將不勝感激。

回答

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 
+0

儘管多重繼承需要使用PolyModel,但如果我只是創建一個從ndb.Model繼承的BaseClass,然後使其他類從該基類繼承,它將起作用。到目前爲止,一切都按預期工作,謝謝! –

相關問題