私はStudentモデルとEntryモデルを持っています。各エントリには、学生への外部キーと、年スタンプと、2つの数値(value1とvalue2)があります。私はStudentAdminクラスのget_queryset()メソッドをオーバーライドしており、Django ORMを使用して、 "specialvalue"と呼ばれるフィールドに注釈を付ける必要があります。フィルタなしのDjango条件付き注釈
学生は各年に最大1つのエントリがありますが、それらは存在しない可能性があります。また、今後数年間エントリがあるかもしれません。 "specialvalue"の値は、今年のエントリのEntry__value1からEntry__value2を差し引いたものに等しくなります。生徒に今年の入学がない場合、specialvalueはNoneに等しくなり、これらの生徒はクエリーセットから削除されません。
どうすればいいですか?最初に私は二つにクエリセットを分割しようとした:
queryset_1 = queryset.filter(entry__year=THIS_YEAR).annotate(specialvalue=...)
queryset_2 = queryset.exclude(entry__year=THIS_YEAR).annotate(specialvalue=Value(None))
して、それらを別々に注釈を付けると、それらをマージ|残念ながらこれはknown bug in Django's ORMのため誤った結果になります。
ありがとうございました!
あなたの学生およびエントリモデル構造 –
@NeErAjKuMaRが、私は、関連するすべてのものがあると思います。各エントリには、学生への外部キー、年フィールド、および値1および値2のフィールドがあります。各生徒は名前などの無関係のフィールドをいくつか持っています。それ以外のものがある場合は、それを含めて私に知らせてください。ありがとう。 – jediahkatz