2012-05-03 6 views
2

私のアプリで各リクエストに必要なSQL選択クエリの数(Django + Tastypie)を理解しようとしています。私は関連するログを見ることができるようにログ設定を変更しました。 なんらかの理由で、私は膨大な数のこれらのログを見る。 たとえば、単純なget_listの場合、〜100の選択行があります。 デバッグしようとしたときに、どこから来たのかを確認するために、これらのログを生成する行に入ることができませんでした。 私はまた、左の数字が非常に低い(通常は0.001)ことに気付きました。私はこの数がクエリを実行する時間(秒)であると仮定します。Django SQL Selectログ - なぜそれらの多くが表示されますか?

これらすべての行の説明は何でしょうか?

答えて

1

あなたのtastypie api.pyファイルでは、おそらくデフォルトのクエリセットをprefetch_relatedまたはselect_relatedのいずれかに変更する必要があります。どちらを使用するかは、実際のモデルによって異なります。ここに例があります:

class OfferResource(ModelResource): 
    user = fields.ForeignKey(UserResource, 'user', full=False) 
    country = fields.ForeignKey(CountryResource, 'country', full=True) 
    campaign = fields.ForeignKey(CampaignResource, 'campaign', full=False)  
    network = fields.ForeignKey(NetworkResource, 'network', full=False, null=True)  
    class Meta: 
     queryset = Offer.objects.prefetch_related('offerstat').select_related('country', 'campaign', 'network').all() 
+0

ありがとうございます。なぜあなたは 'offerstat'でprefetch_relatedを使用し、残りはselect_relatedですか? – Uzi

+1

Uzi: 'select_related'はリバースリレーションシップでは機能しませんが、 'prefetch_related'は以下のようになります:https://docs.djangoproject.com/en/dev/ref/models/querysets/#prefetch-related – lamplightdev

関連する問題