Django之model聚合使用
from from django.db.models import Q, F, Sum, FloatField
from django.db.models.functions import Cast
1.F
F对象可以用于查询过程中,对某个字段进行一些算术运算,比如加减乘除
qs = TradeDetail.objects.values(“profit”,“name”).annotate(profit=F(“money”)-100)
profit = qs.first()[“profit”] # 获取某件商品的利润
2.Q
Q对象可以用于查询过程中,一些逻辑条件之间合并查询,比如或与关系的查询
qs1 = TradeDetail.objects.values(“profit”,“name”).filter(Q(money__gte=100) | Q(direction=“1”))
3.聚合
1. Cast,用于做类型转换
q1 = TradeDetail.objects.values("profit", "name").annotate( profit=F("money") * F(Cast('direction', FloatField())))
2.Coalesce,从前向后,查询第一个不为空的值
q2 = TradeDetail.objects.annotate(c=Coalesce('name', 'money'))
3. Concat,拼接
TradeDetail.objects.update(name=Concat('name', 'money'))
4.ConcatPair,拼接(仅两个参数)
TradeDetail.objects.annotate(c=ConcatPair('name', 'money'))
5.Greatest,获取比较大的值;least 获取比较小的值;
TradeDetail.objects.annotate(c=Greatest('id', 'money',output_field=FloatField()))
6.Length,获取长度
TradeDetail.objects.annotate(c=Length('name'))
7. Lower,Upper,变大小写
TradeDetail.objects.annotate(c=Lower('name'))
TradeDetail.objects.annotate(c=Upper('name'))
8. Now,获取当前时间
TradeDetail.objects.annotate(c=Now())
迎风搬石头
发布了8 篇原创文章 · 获赞 9 · 访问量 268
私信
关注