2013-02-21 59 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,那麼對於用戶永遠不會有多本書籍。這意味着您也可以取消Book中的引用屬性。即使使用get_or_insert,除非您明確控制密鑰生成,否則它們可能是多個引用用戶的Book實體。 – 2013-02-23 11:57:10

回答

3

我認爲get or insert可能對此有用。也許當你創建你的用戶模型時,你可以用get_or_insert這個帶有用戶名(假設是唯一的)的書模型,因爲它是關鍵,顯然是第一次創建並隨後得到它。

Model.get_or_insert (key_name, **kwds) 

試圖獲取模型種類與給定鍵 名的實體。如果它存在,get_or_insert()只是返回它。如果不存在 ,則會創建,存儲並返回具有kwds 中的給定種類,名稱和參數的新實體。

get和後續(可能)放置操作被包裝在 事務中以確保原子性。這意味着get_or_insert()將不會覆蓋現有的實體,並且將插入一個新的實體,如果 ,並且只有在沒有給定種類和名稱的實體存在的情況下。

相關問題