Login
芋圆社区 > 编程 > Django > Django多条件查询

Django多条件查询

1009
0
2022-08-01
2022-08-01
Hey、小怪兽

  • • 之前介绍了order_by排序的多条件查询,只需要往括号里面塞排序字段即可,先是按rank降序,再按Taco降序,最后按nowexp降序:
  • userRank = User.objects.all().order_by('-rank', '-Taco', '-nowexp')[:50]
  • • 一般情况下,Django会用到大量的查询,查询的时候也需要多条件,假设数据库内的用户部分信息如下:
  • • 想要拿到rank等于1的用户,可以这样写:
  • userRank = User.objects.filter(rank=1)
  • • 想要拿到rank等于1或者等于4的用户,当然不能用order_by的写法了,因为括号里多了rank=
  • // 错误写法,会报错
    userRank = User.objects.filter(rank=1, 4)
    // 错误写法,会只筛选出rank=1的
    userRank = User.objects.filter(rank=1 or 4)
    // 错误写法,都筛选不出来,两个filter意味着要rank=1和4才行
    userRank = User.objects.filter(rank=1).filter(rank=4)
  • • 正确写法可以用到__in,__in可以直接理解为当前字段是否在这个集合中
  • userRank = User.objects.filter(rank__in=[1, 4])
    print(userRank)
  • • 看到顺利地查询到了想要的数据:
  • • exclude和filter会有一点点不同,比方说需要查询rank不为0的用户:
  • userRank = User.objects.exclude(rank=0)
  • • 查询rank不为0并且rank不为4的用户,可以和filter一样用__in:
  • userRank = User.objects.exclude(rank__in=[0, 4])
  • • 也可以用两次exclude,因为先筛选出不为0的,再从里面筛选不为4的也是可以的:
  • userRank = User.objects.exclude(rank=0).exclude(rank=4)
  • • 用__in的话,为了避免筛选条件过多导致行代码过长,可以用一个变量储存:
  • // 筛选出不含三个名字的数据
    user_exclude = ['Hey、小怪兽', 'Kw75', 'lisc']
    userRank = User.objects.exclude(username__in=user_exclude)
  • • 多条件不单单指单个字段多条件查询,还值多个字段多条件查询,如果要搜索rank不为0和4,名字不为'Hey、小怪兽', 'Kw75', 'lisc'的数据
  • // 这里注意,错误写法!
    // 第一步:先搜索等于['Hey、小怪兽', 'Kw75', 'lisc']的数据
    // 第二步:找到这三个用户rank为0或4的,也就是['Kw75', 'lisc']
    // 第三步:筛选出不包括['Kw75', 'lisc']的其他数据,和期望的不一样
    
    user_exclude = ['Hey、小怪兽', 'Kw75', 'lisc']
    userRank = User.objects.exclude(username__in=user_exclude, rank__in=[0, 4])
    
  • // 正确写法
    user_exclude = ['Hey、小怪兽', 'Kw75', 'lisc']
    userRank = User.objects.exclude(username__in=user_exclude).exclude(rank__in=[0, 4])

上一篇:SimpleUI后台导航栏报错

下一篇:标签属性使用变量引发的BUG

Message Board
回复
回复内容不允许为空
留言字数要大于2,小于200!
提交成功,5s后刷新页面!
编程导航

Django使用Less

美化后台管理Admin

FBV 和 CBV

SimpleUI后台导航栏报错

Django多条件查询

标签属性使用变量引发的BUG

auto_now=True引发的问题

图片上传后大小问题

Django版本查看和升级

values和values_list

过滤器linebreaksbr

拆分views文件

AutoField报错

order_by多条件和随机排序

Django变量名的坑

Copyright © 2020 芋圆社区

Powered by 浙ICP备2020039309号-1

此页面不支持夜间模式!

已进入夜间模式!

已进入普通模式!

搜索框不允许为空

签到成功!经验+5!芋圆币+2!

签到失败!今日已签到!

需要登录社区账号才可以进入!

复制成功
寄,页面未加载完成或页面无锚点