【问题标题】:Creating ManyToMany reference between db.Model and NDB在 db.Model 和 NDB 之间创建 ManyToMany 引用
【发布时间】:2012-03-15 18:33:28
【问题描述】:

不断变化的问题。我想在db.ModelNDB 之间申请ManyToMany 关系。 例子

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)

【问题讨论】:

  • 您的问题确实不清楚。你是什​​么意思你在db和ndb之间应用了一个ForeignKey? db.Model 和 ndb 之间的多线程?这一切毫无意义。
  • 同上。从 SearchableModel 派生的类不能是 NDB 模型类,因为 SearchableModel 本身就是一个 db 模型类。您能退后一步,描述一下您的应用需要做什么吗?
  • @Guido van Rossum 感谢您的回复。我已经更新了我的问题。

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


【解决方案1】:

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

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

现在您的 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(它是一个类方法)。

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

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

【讨论】:

    猜你喜欢
    • 2016-11-25
    • 1970-01-01
    • 2016-08-16
    • 2018-04-10
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多