2017-01-16 5 views
0

このような長いクエリを使用するのは良い方法ですか? それは他の方法で行うべきですか? それはSQL(postgres)に適していますか?Djangoモデルのクエリは正しいですか?

+0

あなたのモデルを表示しないと、関係のbtwモデルを判断することは困難です。 – shuboy2014

答えて

1

あなたのユースケースを提供する長いクエリで何も問題はありませんが、表示されるクエリには、__inで検索するものを見つけるための不要な内部データベースクエリが多数含まれています。あなたはそれを以下に書き換えることができるはずです。

goodbills = Billinfo.objects.filter(status=20, 
            lead__link__partner=self.id, 
            lead__link__landing=eachlanding).count() 

これにより、リンクオブジェクトと先行オブジェクトを取得する必要がなくなりました(私の意見では理解しやすくなりました)。

+1

はい、それは魅力のように動作します。私はもっと深いドキュメントを掘り下げるべきです。ありがとうございました。 – Baks

+0

@Baks - 心配しないで、楽しい! – Sayse

0

通常、データベースエンジンの動作を妨げるだけでなく、読みやすく管理しやすいようにクエリを保存することをお勧めします。ただし、複雑なクエリを実行しなければならない場合があります。

ERD(エンティティリレーションシップダイアグラム)を知らなくても、そのクエリの構造をより良くする方法を説明することは難しいです。これは、最初の2つのクエリを使用すると、goodbillsクエリを呼び出すたびに実行していないことを確認してしまう

link_ids = Link.objects.filter(partner=self.id, landing=eachlanding) 
lead_id = Lead.objects.filter(link_id__in=link_ids).values_list('id')).values_list('id') 

goodbills = Billinfo.objects.filter(status=20, lead_id__in=lead_ids) 

:しかし、少なくとも、私のような何かをするだろう。

関連する問題