0

变化的问题。我想应用和之间的ManyToMany关系。例子db.ModelNDB

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

现在我想在测试中应用 manyToMany。是否可以?

Django 风格的多对多

created_by = models.ManyToManyField(User)
4

1 回答 1

3

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

这样做的方法是db.ListProperty(db.Key)在 Test 类中有一个,以便 Test 类有一个键列表——其中键指向 User 实体。

现在您的 User 模型是一个 NDB 类,这使事情变得有些复杂。但是 ndb Key 类有一个 API 用于与 db Keys 相互转换:

  • 如果您有 ndb Key k,k.to_old_key()则返回相应的 db.Key。

  • 如果您有一个 db Key k,ndb.Key.from_old_key(k)则为其返回 ndb.Key(它是一个类方法)。

希望这可以帮助。祝你好运!

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

于 2012-03-17T04:48:26.287 回答