0

以下のクエリをできる限り最適化しました。

 message = Message.objects.defer('gateway', 'batch', 'content_type', 'sender',
                                            'reply_callback')\
                .select_related().get(pk=message_id)

billeeただし、モデルには(以下を参照)というフィールドがあります。

billee = generic.GenericForeignKey()

おそらく GenericForeignKey であるため、このフィールドで select_related または defer を使用できないようです。誰かが理由を説明してから、これを達成する方法の例を教えてもらえますか?

4

1 に答える 1

1

select_related()一般的なリレーションをプリフェッチすることはできません ( と でのみ機能しForeignKeyますOneToOneField)。そのため、この 1 つの追加クエリを本当に削減したい場合は、生の SQL クエリを記述する必要がある場合があります。

一度に多くのメッセージを取得する場合は、prefetch_related()一般的な関係に従うことができる which を使用できます (ただし、追加のクエリを作成します)。

于 2013-08-25T22:15:05.720 に答える