Как сделать ссылки между моделями расширения? - PullRequest
1 голос
/ 03 января 2012

Обновление

Это была моя лучшая попытка создать следующую схему enter image description here

user = self.auth.store.user_model.create_user(email,
        password_raw=newpasswd)
if not user[0]:  # user is a tuple
    return user[1]  # Error message
else:

    # User is created, let's try making the references
    okuser = auth_models.User.get_by_id(long(user[1].key.id()))
    okuser.sponsor = auth_models.User.get_by_id(long(sponsor_id)).auth_ids

Оригинальный вопрос

Как сделать ссылку на класс расширения вуказать, какой пользователь является "спонсором" какого?«Спонсор» - это тот, кто пригласил нового пользователя, поэтому при создании мы должны сохранить его, и было бы гораздо лучше сохранить его в качестве ссылочного свойства, чем строку или список строк.

Я могу создать нового пользователяно я не знаю, как сделать ссылку, чтобы я мог сказать для одного пользователя, кто другой пользователь, который является спонсором первого пользователя, и я предполагаю, что способ моделировать это с помощью selfreferenceproperty, так как оба объекта являются пользователями, но сложностьявляется то, что это модель расширения, поэтому я не знаю, как использовать свойство ссылки.Не могли бы вы сказать мне, как это сделать, или дать мне понять, как я могу решить эту проблему наилучшим образом?

user = self.auth.store.user_model.create_user(email,
        password_raw=newpasswd)
if not user[0]:  # user is a tuple
    return user[1]  # Error message
else:

    # User is created, let's try making the reference
    okuser = auth_models.User.get_by_id(user[1].key.id())
okuser.sponsor = db.SelfReferenceProperty(User,
    collection_name='matched_images', verbose_name='Sponsor')

Я не знаю, как выполнить последнюю часть, чтобы сохранить фактические свойства ссылкис моделью эпандо.Как это можно сделать?

Обновление

Кажется, что это невозможно сделать:

NotImplementedError: Property sponsor does not support <class 'google.appengine.ext.db.ReferenceProperty'> types.

Код:

user = self.auth.store.user_model.create_user(email,
        password_raw=newpasswd)
if not user[0]:  # user is a tuple
    return user[1]  # Error message
else:

    # User is created, let's try redirecting to login page
    okuser = auth_models.User.get_by_id(long(user[1].key.id()))
    okuser.sponsor = db.SelfReferenceProperty(auth_models.User.get_by_id(sponsor_id),collection_name='matched_distributor')
    okuser.put()

Это заставляет меня использовать строку вместо ссылки, и тогда возможно решение:

user = self.auth.store.user_model.create_user(email,
        password_raw=newpasswd)
if not user[0]:  # user is a tuple
    return user[1]  # Error message
else:

    # User is created, let's try redirecting to login page
    okuser = auth_models.User.get_by_id(long(user[1].key.id()))
    okuser.sponsor =  sponsor_id
    okuser.put()

1 Ответ

1 голос
/ 04 января 2012

Вы не можете назначить экземпляр класса Property экземпляру модели - классы свойств определяют свойства, они не представляют отдельные значения.

Самым простым способом сделать то, что вы хотите, является добавление свойства, как в обычной модели. То, что вы используете развёртки (почему, кстати?), Не означает, что вы не можете иметь обычные свойства для них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...