0
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。

有没有办法可以确保它的唯一性? 在此处输入图像描述

4

1 回答 1

3

如果您允许 GAE 为您创建它们,它们将是独一无二的。

然而,也考虑了父实体,因此从根实体开始并从父实体到子实体的实体序列,导致给定实体,构成该实体的祖先路径。

因此,识别实体的完整密钥由一系列种类标识符对组成,该序列指定其祖先路径并以实体本身的路径终止。

因此,如果您要手动手动生成这些 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

于 2013-03-07T10:03:24.943 回答