私は私のテーブルからいくつかの情報を取得しようとしています。合計料金、2つの日付間の合計旅行など。ここに私のクエリはDjango ORMグループIDによって
start_date = Utils.subtract_day(datetime.datetime.today(), 30)
end_date = datetime.datetime.today()
trips = TbPastTrips.objects.filter(identity=identity, creation_time__range=(start_date, end_date),
status=TripStatus.PAYMENT_COMPLETED)\
.annotate(total_price__=Sum('price'), total_tip=Sum('tip_amount'),
total_additional_fees=Sum('additional_fees'), total_trip=Count('price')) \
.values('total_price__', 'total_tip', 'total_additional_fees', 'total_trip')
print(trips.query)
ですこれは私がクエリセットの上から期待した生のSQLクエリです:
SELECT SUM(`tb_past_trips`.`PRICE`) AS `total_price__`, SUM(`tb_past_trips`.`TIP_AMOUNT`) AS `total_tip`, SUM(`tb_past_trips`.`ADDITIONAL_FEES`) AS `total_additional_fees`, COUNT(`tb_past_trips`.`PRICE`) AS `total_trip` FROM `tb_past_trips` WHERE (`tb_past_trips`.`IDENTITY` = 44444444444 AND `tb_past_trips`.`CREATION_TIME` BETWEEN '2017-08-29 10:36:19.446371' AND '2017-09-28 10:36:19.446405' AND `tb_past_trips`.`STATUS` = 4)
しかし、それは余分なクエリの下に追加されます。
GROUP
tb_past_trips
BY。ID
ORDER BY NULL
とクエリの最後。しかし、私はそれをグループ化したくありません。
私がやっている間違ったことは何ですか?
Djangoのバージョン:(1、11、5、 'final' は、0)
のPython 3.6.2
追加モデル:
class TbPastTrips(models.Model):
id = models.AutoField(db_column='ID', primary_key=True) # Field name made lowercase.
transaction_id = models.CharField(db_column='TRANSACTION_ID', max_length=50, blank=True, null=True) # Field name made lowercase.
identity = models.CharField(db_column='TAXI', max_length=20) # Field name made lowercase.
price = models.IntegerField(db_column='PRICE', blank=True, null=True) # Field name made lowercase.
tip_amount = models.IntegerField(db_column='TIP_AMOUNT', blank=True, null=True) # Field name made lowercase.
additional_fees = models.IntegerField(db_column='ADDITIONAL_FEES', blank=True, null=True) # Field name made lowercase.
total_price = models.IntegerField(db_column='TOTAL_PRICE', blank=True, null=True) # Field name made lowercase.
creation_time = models.DateTimeField(db_column='CREATION_TIME') # Field name made lowercase.
class Meta:
managed = False
db_table = 'tb_past_trips'
あなたのモデルは何ですか?どうやってそれを管理しましたか?それはデータベースビューですか? –
私はmissusageを見つけました、私は集計を使用する必要があります注釈しないでください。 https://stackoverflow.com/questions/7981837/difference-between-djangos-annotate-and-aggregate-methods – RockOnGom
助けてくれれば助かります。あなたの質問に答えを加えることができれば、他の人を助けることができます。 –