我有两个关于一对多的模型:
类问题(db.Model):
questionText = db.StringProperty(multiline = False)
类答案(db.Model):
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呢?)
Shoud我使用其他设置,GQL查询或django框架来使其工作?
答案 0 :(得分:1)
默认情况下,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
),这将依次进行您需要的数据存储区查找。
重要的是不要将此设置放在应用程序范围内,因此任何问题都会在实例上显示答案属性。