GAE DataStore готов загрузки в Python API - PullRequest
1 голос
/ 20 января 2010

У меня есть две модели по отношению один ко многим:

Вопрос класса (дБ. Модель):

questionText = db.StringProperty (multiline = False)

ответ класса (db.Model):

answerText =db.StringProperty (multiline = False)

question = db.ReferenceProperty (Question, collection_name = 'answers')

Iиметь интерфейс, реализованный во Flex, и использовать pyamf для загрузки данных.

Когда я пытаюсь загрузить все ответы со связанными вопросами, все работает как нужно, и я могу получить доступ к полю

answer.вопрос

однако в случае загрузки вопросов (например, by ​​Questions.all ()), «question.answers» остается пустым / пустым

(хотя на стороне сервера / питона я могуПересмотрите вопрос. Отвечает без проблем - возможно, после ленивой загрузки).

Так можно ли загрузить все вопросы вместе с ответами?

(я знаю, что это возможно в JPA Java API, но как насчет python?)

Должен ли я использовать дополнительные настройки, GQL-запрос или инфраструктуру django, чтобы она работала?

1 Ответ

1 голос
/ 20 января 2010

По умолчанию PyAMF не будет кодировать поля ReferenceProperty, если они не были специально загружены методом сервиса. Это сделано специально, поэтому вам не нужно кодировать больше, чем нужно.

PyAMF ищет специальный атрибут класса __amf__, который он использует для настройки процесса кодирования и декодирования для экземпляров этого типа. Более подробную информацию можно найти в документах .

Итак, чтобы принудительно закодировать все ответы на все вопросы, которые вы должны сделать:

class Question(db.Model):
    class __amf__:
        static = ('answers',)

    questionText = db.StringProperty(multiline=False)

class Answer(db.Model):
    answertText = db.StringProperty(multiline=False)
    question = db.ReferenceProperty(Question, collection_name='answers')

Установка статического атрибута гарантирует, что каждый экземпляр Question будет иметь установленный атрибут answers (через getattr), который, в свою очередь, будет обращаться к требуемому поиску хранилища данных.

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

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