Создание ссылки ManyToMany между db.Model и NDB - PullRequest
0 голосов
/ 15 марта 2012

меняющийся вопрос. Я хочу применить ManyToMany отношения между db.Model и NDB. Пример

NDB модель

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

db модель

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

Могу ли я применить ManyToMany взаимосвязь между этими моделями?

EDIT:

Вот моя 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 к Test. Возможно ли это?

Django стиль ManyToMany

created_by = models.ManyToManyField(User)

1 Ответ

3 голосов
/ 17 марта 2012

Понятно. Мне пришлось искать документы Django ManyToManyField. IIUC вы хотите, чтобы тест создавался несколькими пользователями, и, конечно, каждый пользователь может создавать несколько тестов. Я правильно понял?

Способ сделать это состоит в том, чтобы иметь db.ListProperty(db.Key) в классе Test, чтобы у класса Test был список ключей - где ключи указывают на сущности User.

Теперь ваша модель User является классом NDB, что немного усложняет ситуацию. Однако у класса ndb Key есть API для преобразования в и из ключей db:

  • Если у вас есть ключ ndb k, k.to_old_key() возвращает соответствующий ключ db.Key.

  • Если у вас есть ключ db k, ndb.Key.from_old_key(k) возвращает для него ключ ndb.Key (это метод класса).

Надеюсь, это поможет. Удачи!

PS. Обновите свой код, чтобы использовать from google.appengine.ext import ndb, чтобы вы могли писать ndb.Expando, ndb.StringProperty и т. Д.

...