2011-01-27 5 views
1

Google App EngineのPythonで 'get_or_insert'を使用してレコードとユーザーを照合しようとしています。一致するキーとユーザーを取得または作成する(Python - App Engine)

以下のモデルを使用して、BookUserのレコードを持っている場合は、BookUserにリストされているブックのレコードがユーザーにあるかどうかを確認します。彼らがXXデータでそれを作成せず、それをBookとUserに関連付けるのであれば。

class User(db.Model): 
    id = db.StringProperty() 
    name = db.StringProperty() 
    image = db.BlobProperty(default=None) 

class Book(db.Model): 
    image = db.BlobProperty() 
    date_added = db.DateTimeProperty(auto_now_add=True) 
    is_active = db.BooleanProperty(default=True) 

class BookUser(db.Model): 
    book = db.ReferenceProperty(Book) 
    user = db.ReferenceProperty(User) 
    is_active = db.BooleanProperty(default=True) 

私はまだApp Engine、キーなどを頭に入れています。 助けていただければ幸いです。ありがとうございます。

D

答えて

1

あなたはあなたの関係はユニークな作りの非常に単純な方法を与えるユーザーとブックのキーのBookUserエンティティのキ​​ー複合体を、作ることができます。

bookuser_key_name = "%s:%s" % (str(book_key.id_or_name()), str(user_key.id_or_name())) 
bookuser = BookUser.get_or_insert(bookuser_key_name) 
# set your values... 
bookuser.put() 
+0

ありがとうございましたRob、私はかなり遠くのキーのカーブを見つけているので質問してください。 "book_key.id_or_name()"はどこから来たのですか?私はbookを挿入するときにkey_nameを設定しています(例: "book-23moby-dick")。この "book_key.id_or_name()"はBookテーブルの最初の検索からどのように取得するのですか? –

+0

@Dexter Holiday、エンティティを置くと、キーが返されます。エンティティを取得する場合は、entity.key()(http://code.google.com/appengine/docs/python/datastore/modelclass.html#Model_key)を使用してエンティティを取得できます。 –

関連する問題