1

コード:

MyModel(models.Model):
    start_date = models.DateTimeField()
    end_date = models.DateTimeField()
    name = models.CharField()
    somenum = models.IntegerField()

すべての「somenum」(上記のモデルの最後のフィールド) の合計を計算する場合は、次のようにします。

queryset.aggregate(Sum('somenum'))

私の要件:

(終了日 - 開始日) の合計 (つまり、結果は日数) (土曜日と日曜日) を除外します。

通常のロジックを使用してこれを行うことができますが、集約または他の方法が好ましいと思います。

私が知っている方法:

  1. queryset のすべてのレコードをループし、各レコードの日数 (土日を除く) を計算し、ループ中に合計します (ループ前の sum=0 のように、ループ内 sum += current_value; )。
  2. モデル保存時にこの計算(合計)を行う信号を書き込み、計算値をUserProfileに保存します。値が必要な場合は UserProfile から取得できますが、このプロセスにはバグがあると思います。
  3. 上記のMyModelに別のフィールド「num_of_days」を追加すると、モデルが保存されるたびに、シグナルが計算を実行し、そのフィールドを保存する必要があります。次に、 queryset.aggregate(Sum('num_of_days')) を使用できます。
4

1 に答える 1

1
  1. MyModelこのデータが必要になるたびに、Python ですべてをクエリして合計する必要があります。これは効率的でもスケーラブルでもありません。
  2. UserProfile日数が に属しているように見える理由は何MyModelですか?
  3. 私はこれが好ましい方法であるべきだと思います。シンプルでエレガント、作業が簡単です。これを行うことで、集計をデータベースに配置します
于 2013-03-16T13:34:01.550 に答える