2013-02-21 2 views
0
class User(db.Model): 
    username = db.StringProperty(required=True) 
    password = db.StringProperty(required=True) 
    email_address = db.StringProperty(required=True) 
    profile_img = db.BlobProperty() 

class Book(db.Model): 
    user = db.ReferenceProperty(User, collection_name='books') 
    #first build 
    Book_1 = db.BooleanProperty(default=False) 
    Book_2 = db.BooleanProperty(default=False) 
    Book_3 = db.BooleanProperty(default=False) 
    Book_4 = db.BooleanProperty(default=False) 

안녕하세요, 저는이 두 모델과 일대일 관계를 만들고 싶습니다. 각 사용자별로 두 가지 이상의 책 모델을 만들 수 없도록 할 수있는 방법이 있습니까?python google appengine datastore에서 일대일 관계를 수행하는 방법은 무엇입니까?

감사합니다.

+0

"book"이라는 키 이름으로 책 모델을 만들고 조상을 User로 만들고 get_or_insert를 사용하면 사용자에 대해 둘 이상의 책을 만들 수 없습니다. 즉, 책에서 참조 속성을 제거 할 수도 있습니다. get_or_insert를 사용해도 키 생성을 명시 적으로 제어하지 않는 한 사용자를 참조하는 여러 Book 엔터티가 될 수 있습니다. –

답변

3

제가 생각하기에 이것은 get or insert입니다. 아마도 사용자 모델을 만들 때 사용자 이름이 아마도 독창적 인 책 모델 인 get_or_insert을 키로 사용할 수 있습니다. 분명히 처음 만들었고 나중에 가져 오는 것입니다.

Model.get_or_insert (key_name, **kwds) 

시도는 지정된 키 이름을 가진 모델의 종류의 실체를 얻을 수 있습니다. 존재하는 경우, get_or_insert()는 단순히 그것을 리턴합니다. 이 없으면 kwds 에 지정된 종류, 이름 및 매개 변수가있는 새 엔터티가 만들어지고 저장되고 반환됩니다.

반입 및 후속 (가능한) put 조작은 트랜잭션으로 래핑되어 원 자성을 보장합니다. Ths는 get_or_insert()가 이 기존 엔티티를 덮어 쓰지 않으며, 주어진 종류 및 이름의 엔티티가없는 경우에만 인 경우 새 엔티티를 삽입 함을 의미합니다.

관련 문제