我有两个一对多关系的模型:
class Question(db.Model):
questionText = db.StringProperty(multiline=False)
类答案(db.Model):
block 引用>answerText = db.StringProperty(multiline=False)
question = db.ReferenceProperty(Question, collection_name='answers')
我在 Flex 中实现了前端并使用 pyamf 加载数据。
当我尝试加载所有包含相关问题的答案时,所有答案都按预期工作,我可以访问 字段
answer.question
但是,在加载问题的情况下(例如通过 Questions.all() ),“question.answers”保持为空/null
(尽管在服务器/python端我可以毫无问题地修改question.answers - 可能是在延迟加载之后)。
那么是否可以加载所有问题和答案?
(我知道这在 JPA Java api 中是可能的,但是 python 呢?)
我应该使用额外的设置、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
),该属性将依次发送到数据存储区查找您需要的。
重要的是,此设置不适用于应用程序范围,因此任何问题都将具有出现在实例上的答案属性。
关于python - GAE 数据存储在 python api 中预先加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2098417/