flask_restplus
で再帰的マッピングを定義する方法がありますが、状況に必要な最大再帰レベルについて仮定する必要があります。あなたはアダムとエバに到達したくないでしょうか?
api.model
を直接使用する代わりに、そのモデルを再帰的に構築し、各再帰呼び出しでiteration_number引数をデクリメントするメソッドを記述します。
def recursive_person_mapping(iteration_number=10):
person_json_mapping = {
'name': fields.String(),
'date_of_birth': fields.Date()
}
if iteration_number:
person_json_mapping['parents'] = fields.List(fields.Nested(recursive_person_mapping(iteration_number-1)))
return api.model('Person'+str(iteration_number), person_json_mapping)
その後、マーシャラーであなたの方法を飾るときに、このように、関数呼び出しを行うことを忘れないでください:
@api.marshal_with(recursive_person_mapping())
def get(self):
...
は丸括弧に注意してください!
スワッガーを使用する場合は、'Person'+str(iteration_number)
が必須であることにも注意してください。 iteration_numberを追加しないと、再帰制限のオーバーフローが発生し、内部サーバーエラーが発生します。すごいことの外に、マッパーはそれなしでうまくいくでしょう。
最大レベルの再帰を任意に仮定した後、再帰制限を超過した場合に自動的に管理者に通知することをお勧めします。これは、データを作成するメソッドの責任であり、マーシャル自身ではありません。
出典
2017-10-04 10:13:07
bgw