コード:
MyModel(models.Model):
start_date = models.DateTimeField()
end_date = models.DateTimeField()
name = models.CharField()
somenum = models.IntegerField()
すべての「somenum」(上記のモデルの最後のフィールド) の合計を計算する場合は、次のようにします。
queryset.aggregate(Sum('somenum'))
私の要件:
(終了日 - 開始日) の合計 (つまり、結果は日数) (土曜日と日曜日) を除外します。
通常のロジックを使用してこれを行うことができますが、集約または他の方法が好ましいと思います。
私が知っている方法:
- queryset のすべてのレコードをループし、各レコードの日数 (土日を除く) を計算し、ループ中に合計します (ループ前の sum=0 のように、ループ内 sum += current_value; )。
- モデル保存時にこの計算(合計)を行う信号を書き込み、計算値をUserProfileに保存します。値が必要な場合は UserProfile から取得できますが、このプロセスにはバグがあると思います。
- 上記のMyModelに別のフィールド「num_of_days」を追加すると、モデルが保存されるたびに、シグナルが計算を実行し、そのフィールドを保存する必要があります。次に、 queryset.aggregate(Sum('num_of_days')) を使用できます。