У меня есть две модели по отношению друг к другу:
class Question (db.Model):
questionText = db.StringProperty(многострочный = False)
class Answer (db.Model):
answerText = db.StringProperty(многострочный = False)
question = db.ReferenceProperty(Question, collection_name = 'answers')
У меня есть интерфейс, реализованный в Flex и использующий pyamf для загрузки данных.
Когда я пытаюсь загрузить все ответы со связанными вопросами, все работает по желанию, и я могу получить доступ поле
answer.question
однако в случае загрузки вопросов (например, Question.all()), `question.answers 'остается пустым /null
(хотя на стороне сервера /python я могу пересмотреть question.answers без проблем - возможно, после ленивой загрузки).
Так можно ли загружать все вопросы вместе с ответами?
(Я знаю, что это возможно в JPA Java api, но как насчет python?)
Shoud Я использую дополнительные настройки, GQL-запрос или фреймворк django, чтобы заставить его работать?
По умолчанию PyAMF не будет кодировать поля ReferenceProperty, если они уже не были специально загружены методом службы. Это специально, поэтому вы не кодируете больше, чем вам нужно.
PyAMF ищет специальный атрибут класса __amf__
, который он использует для настройки процесса кодирования и декодирования для экземпляров этого типа. Более подробную информацию можно найти в docs.
Итак, чтобы заставить кодировать все ответы по всем вопросам, которые вы должны сделать:
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
), который, в свою очередь, потребует поиска хранилища данных.
Важно, чтобы этот параметр не был широко распространен, поэтому любой вопрос будет иметь атрибут ответов, как он появляется на экземпляре.