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 に答える