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共享