Djangoアプリで次のコードを使用します。
pictures = gallery.picture_set.annotate( score=models.Sum( 'picturevote__value' ) ).order_by( '-score' )
ギャラリーのテーブルがあります。それらのそれぞれにいくつかの写真があります。ユーザーが画像に賛成または反対票を投じると、「picturevote」の新しい行が挿入され、画像に接続されます。次に、写真の合計スコアを取得できます。次に、1つのギャラリーの写真をスコア値で並べ替えます。ただし、テーブルの結合により、投票がまったくなかった場合、スコアの値がNULLになる可能性があります。それでも、スコア「NULL」は「0」として扱われます。
何か案は?
編集:さて、ここでいくつかの追加の説明:問題は、上記の例の集計がscore
NULLに設定されることです。スコアを表示したいときは、次のようなものを使用します。
score = self.picturevote_set.aggregate( models.Sum( 'value' ) )[ 'value__sum' ] or 0
次に、集計により、NULL(picturevote行がない場合)または特定の値が生成されます。NULLの場合、or式は表示可能な整数値に変換します。しかし、これはNULL値によって引き起こされる表示の問題だけを解決します。最初のコード例のようにこの値で画像を並べ替えたい場合score
、NULLのすべてのエントリが順序付けられた結果セットの最後に配置されます。最初に正のスコアの画像があり、次に負の値の画像があり、次に、がNULLであるため、これまで投票されなかった画像がありますscore
。
私の質問は、順序が正しくなるようにこの動作をどのように変更できるかです。