をフィルタリングされたときに私の質問のより一般的なバージョンが既に尋ねたビークました:Count vs len on a Django QuerySetCountはいくつかの結果が
私の場合は、しかし、少し異なっています。
messages = Message.objects.filter(foo=bar)
error_message_count
とother_message_count
を取得するには、優れている:それはこのような何かで始まりますか?
error_message_count = len(message for message in messages if message.is_error)
other_message_count = len(messages) - error_message_count
か:
error_message_count = messages.filter(is_error = True).count()
other_message_count = messages.count() - error_message_count
かさえ:
error_message_count = messages.filter(is_error = True).count()
other_message_count = messages.filter(is_error = False).count()
私は最初の解決策は一つだけのクエリに帰着し、2つで他と思われます。しかし、おそらくDjangoやDBMSは、2番目の2つのうちの1つをより効率的にするでしょうか?
私は答えとして「プロフィール」を受け入れますが、これらの解決策のいずれかがベストプラクティスと考えられるかどうかは疑問です。
これらのリクエストされたメッセージを後で使用しているのですか、それとも2つの数字だけを取得したいのですか?元のフィルタリングされたリスト(数十、千)に含まれるメッセージの数はいくつですか?リストの予想されるエラー率はいくらですか? – serg
良い質問ですが、私は実際に答えを確信していません。数字はページの上部にあるステータスアイコンです。ユーザーはメッセージをクリックしてメッセージを表示したり無視したりすることができます。私はメッセージの数についてはわかりませんが、数十を超える数があれば驚くでしょう(私の場合、この質問はパフォーマンスよりもスタイルに関するものですが、誰かが非常に異なるアプリケーションはいつか)。私はまた、エラーになる割合についても分かりません。ユーザはそれが非常に小さいことを望むだろうが、実際には第三者のデータの品質に依存する。 –