django模型基础五:模型补充内容 F查询 Q查询

Q查询: 如果你需要执行更复杂的查询(例如OR语句),你可以使用Q对象。

逻辑判断 与 或 非

Student.objects.filter(Q(s_name='秋香')|Q(s_name='夏天'))
Student.objects.filter(Q(s_name='秋香')&~Q(department__d_name="北京大学"))

F查询: 针对两个字段的值的比较

拿到每一个字段里的值
针对两个字段的值的比较
拿到某一个字段里所有查询

#详情表 年龄所有加一
Detail.objects.all().update(age=F('age')+1)
# 小于18岁的学生加一
Detail.objects.filter(age__lt=18).update(age=F('age') + 1)

聚合查询:aggregate()

aggregate()是QuerySet 的一个终止子句,它返回一个包含一些键值对的字典

Detail.objects.all().aggregate(Avg('age')) #聚合方法 平均年龄
Detail.objects.all().aggregate(Sum('age')) #聚合方法 平均年龄
#改变键值对名称
Detail.objects.all().aggregate(age=Avg('age'))

分组查询: annotate()

annotate()为调用的QuerySet中每一个对象都生成一个独立的统计值

#统计学生 报名的学校  #聚合
    Student.objects.values('department') #每一个学生对应学院的值
    Student.objects.values('department').annotate(count=Count('department')) #外键出现的次数
    #给每个外键值重新取名称
    Student.objects.values('department').annotate(count=Count('department')).values('department_id','count')

    #查询每一个课程报名的人数
    Course.objects.all()
    Course.objects.all().annotate(count=Count('student'))
    Course.objects.all().annotate(count=Count('student')).values('c_name', 'count')

    #统计学生报名课程数目
    Student.objects.all().annotate(count=Count('course')).values("s_name",'count')
    #统计学生详细的报名课程
    Student.objects.all().annotate(count=Count('course')).values("s_name", 'course')


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值