2012-12-01 4 views
1

부모가없는 모델은 있습니다. 엔티티에 부모가 있어야합니다. 자식 엔터티가 필수 속성과 비슷한 부모없이 인스턴스화 된 경우 예외가 발생하기를 바랍니다. 예외 발생시키지 않습니다Google 앱 엔진 엔티티 상위 항목이 필요합니다.

class Parent(db.Model): 
    eye_color = db.StringProperty(required=True) 

class Child(db.Model): 
    pass 

:

mom = Parent(eye_color='purple') 
jimmy = Child(parent=mom) 

예외 발생시킵니다 :

mom = Parent(eye_color='purple') 
jimmy = Child() 

답변

2

나는 개인적으로이 시도하지 않은,하지만 당신은 자식에 대한 __init__를 오버라이드 (override) 할 수 있어야한다 부모가 None이 아닌지 확인하십시오. 좋아요 :

+0

나를 위해 충분합니다! 하나의 질문. 아이에게 슈퍼를 부르는 것이지, 그렇지 않은 것을 의미합니까? –

+0

이것은 실제로 권장되지 않습니다,이 질문에 허용 된 솔루션을 참조하십시오 http://stackoverflow.com/questions/3279833/how-to-use-a-custom-init-of-an-app-engine-python-model -class-properly – payala

0

ndb를 사용하면 pre-put 후크 방법을 사용하여 해당 인스턴스에 상위가 있는지 확인하고 그렇지 않은 경우 예외를 발생시킬 수 있습니다. 나는 당신이 오래된 DB 모듈을 사용하고있는 것을보고, 나는 그것이 같은 후크 방법을 가지고 있지 않다고 믿는다. 훨씬 더 향상되고 개선 된 ndb 데이터 저장소 API로 이동하는 것을 고려해야하며, 자동 캐싱 및 기타 여러 이점을 얻을 수 있습니다.

NDB : https://developers.google.com/appengine/docs/python/ndb/overview

NDB 모델 후크 : https://developers.google.com/appengine/docs/python/ndb/entities#hooks

편집 : 난 그냥 당신이 DB를 API와 NDB 모델 후크와 비슷한 뭔가를 할 수 있음을 상기시켰다. this에서 평소와 같이 위대한 Nick Johnson의 게시물에서 설명했습니다.

+0

네 db는 db와 비교했을 때 꽤 멋지다. 다른 프로젝트에서도 사용하고 있습니다. 불행히도 지금은이 코드를 모두 마이그레이션하는 데 시간을 할애 할 필요가 없습니다. –

+0

하지만 db로 할 수 있다면 hook 기반 솔루션과 같은 것을 구현하는 솔루션이 될까요? – payala

+0

물론입니다! 정보 주셔서 감사합니다. 이것은 ndb를 사용하고 있다면 정확히 찾고자하는 것입니다. –