1

我有两个与一对多相关的模型:

类问题(db.Model):

questionText = db.StringProperty(multiline=False)

类答案(db.Model):

answerText = db.StringProperty(multiline=False)

问题 = db.ReferenceProperty(问题,collection_name='answers')

我在 Flex 中实现了前端并使用 pyamf 加载数据。

当我尝试加载所有带有相关问题的答案时,所有的工作都按要求工作,我可以访问字段

回答问题

但是在加载问题的情况下(例如通过 Questions.all() ),'question.answers' 保持为空/null

(尽管在服务器/python 端我可以毫无问题地修改 question.answers - 可能在延迟加载之后)。

那么是否可以加载所有问题以及答案?

(我知道这在 JPA Java api 中是可能的,但是 python 呢?)

我应该使用其他设置、GQL 查询或 django 框架来使其工作吗?

4

1 回答 1

1

默认情况下,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),这将反过来查找您需要的数据存储区。

It is important to not that this setting is application wide, so any question will have an answers attribute as it appears on the instance.

于 2010-01-20T04:20:41.720 回答