1

1 対多の関係にある 2 つのモデルがあります。

クラスの質問 (db.Model):

questionText = db.StringProperty(複数行 = False)

クラス Answer(db.Model):

answerText = db.StringProperty(複数行 = False)

question = db.ReferenceProperty(Question, 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) 属性が設定され、必要なデータストア ルックアップが行われます。

この設定はアプリケーション全体に適用されないことが重要です。そのため、どの質問にも、インスタンスに表示される Answers 属性が含まれます。

于 2010-01-20T04:20:41.720 に答える