0

Expando 모델에 동적 엔터티 유형을 할당 할 수 있습니까? 지금 내가 쿼리 ("페이지", "게시물"등 같은) 종류를 유지하기 위해 "COL"StringProperty를 사용동적 유형의 GAE NDB Expando 모델

class Dynamic(ndb.Expando): 
    """ 
    Handles all "Post types", such as Pages, Posts, Users, Products, etc... 
    """ 
    col = ndb.StringProperty() 
    parent = ndb.IntegerProperty() 
    name = ndb.StringProperty() 
    slug = ndb.StringProperty() 

예를 들어, 나는 동적 개체의 많은 유형이 모델을 사용하려면 매번 "col"을 위해.

class MyModel(ndb.Model): 
    @classmethod 
    def _get_kind(cls): 
     return 'AnotherKind' 

합니까 나는이 작업을 수행 할 수 있습니다 의미 :

는 문서를 읽은 후, 나는이 @classmethod 우연히?

class Dynamic(ndb.Expando): 
    """ 
    Handles all "Post types", such as Pages, Posts, Users, Products, etc... 
    """ 
    col = ndb.StringProperty() 
    parent = ndb.IntegerProperty() 
    name = ndb.StringProperty() 
    slug = ndb.StringProperty() 

    @classmethod 
    def _get_kind(cls): 
     return 'AnotherKind' 

어떻게 'AnotherKind'를 동적으로 바꿉니 까? return col과 같은 작업을 수행 할 수 있습니까?

감사합니다.

+0

제 생각에는 (선들 사이에서 읽는다면) PolyModel을 자세히 살펴 봐야합니다. –

답변

1

당신이 할 수 있는지는 잘 모르겠지만 위험 할 수 있으며 GAE 업데이트로 인해 코드가 손상 될 수 있습니다.

하위 클래스를 사용하는 것이 훨씬 안전한 대안으로 보입니다. 다음과 같이 입력하십시오 :

class Dynamic(ndb.Expando): 
    parent = ndb.IntegerProperty() 
    name = ndb.StringProperty() 
    slug = ndb.StringProperty() 

class Pages(Dynamic): 
    pass 

class Posts(Dynamic): 
    pass 

class Users(Dynamic): 
    pass 

PolyModel을 사용해 볼 수도 있습니다.

더 구체적인 조언을 제공하기 위해 귀하의 신청서와 성취하려는 바를 알 필요가 있습니다.