のは、私はいくつかのモデルを持っているとしましょうB
でA
への参照(ただしC
でB
を参照)、JSONのAPIの出力はこのようなものになるだろうので:参照関係の関係
{
"data": [{
"type": "C",
"id": "1",
"attributes": {
"b_field_1": "...",
"b_field_2": "...",
"c_field_1": "..."
},
"relationships": {
"a": {
"data": {
"type": "A",
"id": "1"
}
}
}
}],
...
}
これについてどうすればいいですか?私はすでにC
のための私のシリアライザ内でこのような何かをやってみました:
A = ASerializer(source='my_reference_to_b.my_reference_to_a')
しかし、DRFは、ソース用の点線のパスをサポートしていないようだと、それは、動作しません。私もソースとして(モデルはメソッド内で有効である)適切なモデルを返すメソッドを供給しようとしたが、それはとしてJSON内の参照を出力しました:私も、私のA
モデルに
"a": {
"data": null
}
別のモデルD
への参照はA
に明示的に記載されていませんが、代わりにD
で定義されたForeignKeyのresource_nameを持つOneToMany関係(多くはD
モデルから1つはA
モデル)これはC
のJSONにその関係を含めることもできません。私は(D = DSerializer(source='B.D')
を行うことによって、それを参照しようとしている)、このエラーを取得する:
'RelatedManager' object has no attribute 'B'
任意の助けをいただければ幸いです。
DRFはドット表記をサポートしています。 http://www.django-rest-framework.org/api-guide/fields/#source。あなたのASerializerクラスに何か問題があるかもしれません。逆の一対一の関係の場合、SerializerMethodFieldを 'hasattr'チェックで使うことができます。 – xtranophilist
はい、それは当てはまりますが、これまで同様のシナリオで作業していましたが、その場合はリレーション内のフィールドを参照するフィールドであり、リレーション内のリレーションではありません。それはこの場合に違いを生むようです。 – tstormk