Django ORM实现按天获取数据去重求和例子
我就废话不多说了,大家还是直接看代码吧!
deftotal_data(request): data=request_body(request,'POST') ifnotdata: returnhttp_return(400,'参数错误') #前端传入毫秒为单位的时间戳 startTimestamp=data.get('startTime','') endTimestamp=data.get('endTime','') ifstartTimestampandendTimestamp: startTimestamp=int(startTimestamp/1000) endTimestamp=int(endTimestamp/1000) else: returnhttp_return(400,'参数有误') #小于2019-05-3000:00:00的时间不合法 ifendTimestamp补充知识:Django对符合条件的某个字段进行求和,聚合函数annotate()
开发环境:Ubuntu16.04+Django1.11.9+Python2.7
对符合条件的某个字段求和
之前在开发的时候,有同事问Django是否存在着这样的方法,可以直接将符合条件的某个字段直接求和.
当时不知道这样的方法是否存在,但是想了想自己解决这类似问题的方法,先用filter将符合条件的取出来,然后进行for循环,取出需要的字段,进行求和.感觉是挺low的,于是一起Baidu,写代码测试最后找到了可以求值的方法,聚合函数annotate().
fromdjango.db.modelsimportSum
frommodelsimportBook
all_price=Book.objects.values('price').annotate(num_books=Sum('price')).filter(author='Yu')
printall_price[0]['num_books']输出结果:650
上面的参数换个顺序,不会出错但不符合预期结果.
all_price=Book.objects.annotate(num_books=Sum('price')).filter(author='Yu').values('price')
printall_youxibi[0]['num_books']输出结果:'nums_book'
以上这篇DjangoORM实现按天获取数据去重求和例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。