Django クエリを使用してモデルの 2 つの異なる Decimal フィールドの大きい方を取得するにはどうすればよいですか?
たとえば、income_actual および Income_projected というフィールドを持つモデル Month がある場合、どのようにすればより大きな値を返すことができますか?
以前は MySQL GREATEST() 関数を使用して実行していましたが、Django で実行する方法がわかりません。
Django クエリを使用してモデルの 2 つの異なる Decimal フィールドの大きい方を取得するにはどうすればよいですか?
たとえば、income_actual および Income_projected というフィールドを持つモデル Month がある場合、どのようにすればより大きな値を返すことができますか?
以前は MySQL GREATEST() 関数を使用して実行していましたが、Django で実行する方法がわかりません。
余分な方法の使用を検討しましたか?
Month.objects.extra(select={'max_income': 'greatest(income_actual, income_projected)'})
編集:
生の SQLを書かずに ORM を介してそれを使用することはできません。Python マジックを使用することもできますが、次のようにします。
sum(month['max_income'] for month in Month.objects.extra(select={'max_income': 'greatest(income_actual, income_projected)'}).values('max_income'))
厳密に SQL を使用したい場合は、@drewman がすでにバージョンを提供しています。少し違うやり方をして、正しいバージョンを動的に計算するプロパティをモデルに追加します。
class model(models.Model):
....
@property
def income(self):
return max(self.income_actual, self.income_real)