0

私は次のモデルを持っています:

class Model(...):
  date = DateField()
  user = ForeignKey()
  data = ForeignKey()
  time = IntegerField()

単一のデータに対してすべてのユーザーの時間フィールドの合計を作成したいので、次のようにします。

Model.objects.filter(date=..., data=...).values('user_id').annotate(time=Sum('time'))

しかし、私は次のような結果を受け取ります:

[{'user_id': 1, 'time': 20},{'user_id': 1, 'time': 10}, {'user_id': 2, 'time': 20}]

したがって、グループ化は機能しません。django によって生成されたクエリを確認しましたが、django がユーザーだけでなくグループ化にも日付とデータを使用する理由がわかりません。私は何か間違ったことをしていますか、これはSQLiteの問題だけですか?

4

1 に答える 1

5

.order_by()デフォルトのモデルの順序をクリアするには、クエリセットに追加する必要があります。

あなたのコードの場合:

(Model.objects.filter(date=…, data=…)
              .values('user_id')
              .annotate(time=Sum('time'))
              .order_by())                        # <---- Here

これは、デフォルトの注文ドキュメントの警告で完全に説明されています:

「完全に機能しないことを除いて。名前によるデフォルトの順序もグループ化に影響します...クエリ内の順序をクリアする必要があります...」

于 2012-12-11T08:18:13.123 に答える