Python Django ORM组(按ID)

Python Django ORM组(按ID),python,mysql,django,python-3.x,Python,Mysql,Django,Python 3.x,我试图从我的表格中获得一些信息;两个日期之间的总价格、总行程等。这是我的问题 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),

我试图从我的表格中获得一些信息;两个日期之间的总价格、总行程等。这是我的问题

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)
这是我期望从上面的queryset中得到的原始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)
但它增加了以下额外的查询:

tb\u过去的行程进行分组
ID
按空排序

以结束查询。但我不想把它分组

那么我做错了什么

Django版本:(1,11,5,'最终版',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'

您只需通过
.order\u by()添加空订单即可。

更多详细信息

使用聚合而非注释

可以使用annotate()子句生成每个对象的摘要。 当指定annotate()子句时,QuerySet中的每个对象 将使用指定的值进行注释

聚集

我们需要的是一种计算对象汇总值的方法 属于这个QuerySet的。这是通过附加聚合()完成的 查询集上的子句


请添加您的型号,我试试您的型号是什么?你是怎么做到的?是数据库视图吗?我找到了,使用错误,我必须使用聚合而不是注释。很好,如果它对你有帮助的话,你可以在你的问题上添加答案,它可以帮助其他人。如果有人已经回答了,我会投票