获取或创建匹配的密钥和用户(Python-AppEngine)

获取或创建匹配的密钥和用户(Python-AppEngine),python,google-app-engine,Python,Google App Engine,在Google App Engine上使用Python中的“get_或_insert”尝试匹配记录和用户 使用下面的模型,我想检查用户是否已经创建了一本书的记录(在BookUser中列出),如果他们在BookUser中确实有记录,则获取该书的详细信息。如果他们不使用XX数据创建它,并将其与书籍和用户关联 class User(db.Model): id = db.StringProperty() name = db.StringProperty() image = db.Blo

在Google App Engine上使用Python中的“get_或_insert”尝试匹配记录和用户

使用下面的模型,我想检查用户是否已经创建了一本书的记录(在BookUser中列出),如果他们在BookUser中确实有记录,则获取该书的详细信息。如果他们不使用XX数据创建它,并将其与书籍和用户关联

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)
我仍然沉浸在应用程序引擎、按键等方面。 任何帮助都会很好,谢谢


d

您可以将BookUser实体的键设置为用户和Book键的组合,这将为您提供一种非常简单的方法,使关系唯一化

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()

您可以将BookUser实体的键设置为用户和Book键的组合,这将为您提供一种非常简单的方法,使关系唯一

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()

谢谢Rob,唯一的问题是我发现关键点上的曲线非常远。“book_key.id_或_name()”来自哪里。当我插入一本书时,我正在设置一个键名,例如:“book-23moby-dick”。如何从book表的初始查找中获取“book_key.id_或_name()”@Dexter Holiday,当您放置实体时,您将获得密钥。或者,如果您获取实体,您可以使用entity.key()()获取其密钥。谢谢Rob,唯一的问题是,我发现关键点上的曲线非常遥远。“book_key.id_或_name()”来自哪里。当我插入一本书时,我正在设置一个键名,例如:“book-23moby-dick”。如何从book表的初始查找中获取“book_key.id_或_name()”@Dexter Holiday,当您放置实体时,您将获得密钥。或者,如果获取实体,可以使用entity.key()()获取其密钥。