Javascript 如果模型中的条目是在同一日期生成的,则必须汇总此模型的字段

Javascript 如果模型中的条目是在同一日期生成的,则必须汇总此模型的字段,javascript,python,django,Javascript,Python,Django,我有一个模型 class paidparking(models.Model): adress = models.ForeignKey(Parking, on_delete=models.SET_NULL, null=True, verbose_name='Адрес парковки') carnumber = models.CharField(max_length=150,verbose_name='Номер автомобиля') amountoftime = m

我有一个模型

class paidparking(models.Model):
    adress = models.ForeignKey(Parking, on_delete=models.SET_NULL, null=True, verbose_name='Адрес парковки')
    carnumber = models.CharField(max_length=150,verbose_name='Номер автомобиля')
    amountoftime = models.IntegerField(verbose_name='Количество времени')
    price = models.FloatField(verbose_name='Цена')
    telephone = models.CharField(max_length=20,verbose_name='Номер телефона')
    email = models.EmailField(verbose_name='Электронный адрес',null=True,blank=True )
    datetimepaidparking = models.DateTimeField(auto_now_add=True, verbose_name='Дата и время оплаты')
    expirationdate = models.DateField(null=True,verbose_name='Дата начала срока действия')
    expirationtime = models.TimeField(null=True,verbose_name='Время начала срока действия')
    enddateandtime = models.DateTimeField(null=True,blank=True,verbose_name='Окончание срока действия')
有一个函数

startdate = datetime.strptime(request.POST['startdate'], '%d.%m.%Y')
enddate = datetime.strptime(request.POST['enddate'], '%d.%m.%Y')
paymentparking = paidparking.objects.filter(expirationdate__range=(startdate, enddate)).values('expirationdate',
                                                                                               'price')
在JS中,我获取这些数据并绘制图表

    $.ajax({
        type: "POST",
        url: "date",
        data: {
            'startdate': finalDateStrStart, 'enddate': finalDateStrEnd,
        },
        dataType: "json",
        cache: false,
        success: function (data) {
             if (data.result) {
                    var expirationdates = [];
                    var prices = [];
                    for (let i = 0; i < data.result.length; i++) {
                        expirationdates.push(data.result[i].expirationdate);
                        prices.push(data.result[i].price);
                    }
if(window.chart instanceof Chart)
{
    window.chart.destroy();
}
                    var ctx = document.getElementById("line").getContext("2d");
                    var chart = new Chart(ctx, {
                        type: 'line',
                        data: {
                             labels: expirationdates,
                            datasets: [{
                                label: 'Оплата парковочных пространств',
                                backgroundColor: 'rgb(255, 99, 132)',
                                borderColor: 'rgb(144,204,244)',
                                data: prices,
                            }]
                        },
                        options: {
                        }
                    });
                    var ctx = document.getElementById("bar").getContext("2d");
                    var chart = new Chart(ctx, {
                        type: 'bar',
                        data: {
                             labels: expirationdates,
                            datasets: [{
                                label: 'Оплата парковочных пространств',
                                backgroundColor: 'rgb(144,204,244)',
                                borderColor: 'rgb(255, 99, 132)',
                                data: prices,
                            }]
                        },
                        options: {
                        }
                    });
                }
        }
    });
return JsonResponse({'result': list(paymentparking)})
$.ajax({
类型:“POST”,
网址:“日期”,
数据:{
“开始日期”:finalDateStrStart,“结束日期”:FinalDateStrenged,
},
数据类型:“json”,
cache:false,
成功:功能(数据){
if(data.result){
var到期日期=[];
var价格=[];
for(设i=0;i
因此,我得到:

我需要在
expirationdate
字段中对同一日期的
price
字段中的值进行求和


现在,如果
expirationdate
字段位于startdate和enddate之间的日期范围内,我的查询将输出所有记录您必须使用
注释
的技巧,如下所述:

从django.db.models导入总和
qs=paidparking.objects.values('expirationdate')。注释(总和('price'))
#如果要按日期订购:
qs=qs.订单日期('expirationdate')
这将输出一个查询设置包含
expirationdate
price\u sum
作为关键字的词汇列表

编辑:

对于注释中的问题,只需在查询的开头添加过滤器:

paidparking.objects.filter(expirationdate\uu range=(startdate,enddate)).values('expirationdate')。注释(总和('price'))

您需要在django orm中使用annotate来获得相同的输出

from django.db.models import Sum

PaidParking.objects.values('expirationdate', 'price') \
  .annotate(parking_price=Sum('price')) \
  .order_by('-expirationdate')
我想这个答案足以回答这个问题。
参考资料:

我现在如何获得价格?我以前是通过data.result[I]得到的。价格我需要同时按日期和总价排序。在您的示例中,会出现求和,但不会出现按日期排序。如何实现?您的示例是排序,我需要检查expirationdate是否在startdate和EndDate范围内您需要使用范围。我使用request paymentparking=paidparking.objects中的范围。filter(expirationdate\uuu range=(startdate,enddate))。值('expirationdate',price')。如何组合这两个查询?您的示例是排序,我需要检查expirationdate是否在startdate和enddate范围内。对于此功能,您可以使用filter命令,该命令已由@Guillaume共享