在db.Model和NDB之间创建ManyToMany引用

时间:2012-03-15 18:33:28

标签: google-app-engine app-engine-ndb

改变问题。我想在ManyToManydb.Model之间应用NDB关系。 示例

NDB型号

class my_NDB(search.SearchableModel):
   .......
   .......

db型号

class Test(search.SearchableModel):
  email = db.StringProperty()
  created_by = db.IntegerProperty()

我可以在这些模型之间应用ManyToMany关系吗?

编辑:

这是我的User模型

  class User(model.Expando):
    """Stores user authentication credentials or authorization ids."""

    #: The model used to ensure uniqueness.
    unique_model = Unique
    #: The model used to store tokens.
    token_model = UserToken

    created = model.DateTimeProperty(auto_now_add=True)
    updated = model.DateTimeProperty(auto_now=True)
    # ID for third party authentication, e.g. 'google:username'. UNIQUE.
    auth_ids = model.StringProperty(repeated=True)
    # Hashed password. Not required because third party authentication
    # doesn't use password.
    email = model.StringProperty(required=True)
    is_active = model.BooleanProperty(required=True)
    password = model.StringProperty()

以下是我的Test db型号

class Test(search.SearchableModel):
  email = db.StringProperty()
  created_by = db.IntegerProperty()

现在我想在Test上应用manyToMany。有可能吗?

Django风格ManyToMany

created_by = models.ManyToManyField(User)

1 个答案:

答案 0 :(得分:3)

我明白了。我不得不查找Django ManyToManyField文档。 IIUC您希望由多个用户创建测试,当然每个用户都可以创建多个测试。我做对了吗?

执行此操作的方法是在Test类中使用db.ListProperty(db.Key),以便Test类具有键列表 - 其中键指向用户实体。

现在你的用户模型是一个NDB类,这让事情变得复杂一些。但是,ndb Key类具有用于与db Keys进行转换的API:

  • 如果你有一个ndb密钥k,k.to_old_key()将返回相应的db.Key。

  • 如果你有一个数据库密钥k,ndb.Key.from_old_key(k)会返回它的ndb.Key(这是一个类方法)。

希望这会有所帮助。祝你好运!

PS。请更新您的代码以使用from google.appengine.ext import ndb,以便您可以编写ndb.Expando,ndb.StringProperty等。