2013-04-24 7 views
7

特定のモデル用のAPIを公開しており、関連するフィールドの一部をシリアル化する必要があります。これらの関連フィールドは頻繁に繰り返されます。関連するフィールドのシリアル化ごとに多数のdbクエリを実行する必要はありません。関連するすべてのインスタンスを事前にクエリする簡単な方法はありますか?それから、RelatedFieldシリアライザで辞書を検索しますか?または、関連フィールドのModelSerializerから指定することはできますか?関連するフィールドモデルを事前に参照する方法はありますか?

答えて

5

クエーセットでDjangoの標準prefetch_relatedselect_relatedメソッドを使用できます。

modelショートカットではなく、queryset属性を使用してください。 例...

class ExampleView(generics.ListCreateAPIView): 
    serializer_class = ExampleSerializer 
    queryset = Example.objects.select_related(...) 
+0

ありがとうございます。私はprefetch_relatedのことを知らなかった。それを使用する方が良いと思われるかもしれませんが、私のシナリオでは最も効率的な実装ではありません。理由は次のとおりです。(1)複数のクエリであるINクエリを使用しますが、アプリケーションでは1つのクエリで必要な結果を予測できます。 (2)関連分野のほとんどが同じモデルクラスを使用しており、prefect_relatedのようには見えません。あなたはこれを行うためのよりカスタマイズされた方法のための他の提案がありますか? – jacob

+0

私はあなたのユースケースがどのようなものかはっきりとは分かりませんが、あらかじめ用意されている一般的なビューには適さないカスタムが必要な場合は、ビューメソッドを明示的に記述することをお勧めします。 –

+0

たとえば、チュートリアルパート3の最初のセクションのように... http://django-rest-framework.org/tutorial/3-class-based-views.html –

関連する問題