class Post(db.Model):
user = db.ReferenceProperty(User, collection_name='posts')
title = db.StringProperty(required=True)
desc = db.TextProperty()
def addApplication(self, user, message, contact_info=""):
new_app = TaskApplication(parent=self, user=user, message=message, contact_info=contact_info)
new_app.put()
class Application(db.Model):
user = db.ReferenceProperty(User, collection_name='applications')
contact_info = db.StringProperty()
message = db.TextProperty()
created = db.DateTimeProperty(auto_now_add=True)
所以我有这些实体,当我添加一个应用程序实体时,我总是将父设置为Post。请参阅上面的addApplication函数。
但是,每次我创建一个应用程序时。数据存储区中的名称/ ID将创建id = 1(请参见下图),我认为gae每次都会创建一个唯一的数字,如39001。
有没有办法确保这种独特性?
答案 0 :(得分:3)
如果您允许GAE为您创建它们,它们将是唯一的。
但是也考虑了父项,因此以root实体开始并从父项继续到子项的实体序列(通向给定实体)构成该实体的祖先路径。
标识实体的完整密钥因此由一系列种类 - 标识符对组成,指定其祖先路径并以实体本身的路径终止。
因此,如果您手动手动生成这些ID,您可以使用类似的内容为父键p的实体分配100个ID:
first, last = MyModel.allocate_ids(100, parent=p)
请注意包含父级。所以你可以稍后为父q运行:
first, last = MyModel.allocate_ids(100, parent=q)
尽管返回的某些ID可能是相同的数字,但它们不会引用相同的模型,因为也会考虑父项(在此示例中实现)。
更多信息:https://developers.google.com/appengine/docs/python/ndb/entities