zoukankan      html  css  js  c++  java
  • Django orm Q查询补充

    Q的简单用法

    from django.db.models import Q
    
    q = Q()
    
    q.children.append(("username", "lyj"))
    
    q.children.append(("age", "18"))
    
    #如果不设置,默认是 and
    q.connector = "or"
    
    res = User.objects.filter(q)

    Q查询可以组合使用 “&”, “|” 操作符,当一个操作符是用于两个Q的对象,它产生一个新的Q对象,Q对象可以用 “~” 操作符放在前面表示否定,也可允许否定与不否定形式的组合。Q对象可以与关键字参数查询一起使用,不过一定要把Q对象放在关键字参数查询的前面。

    from django.db.models import Q
     
    print(Book.objects.filter(Q(id=3))[0])  # 因为获取的结果是一个QuerySet,所以使用下标的方式获取结果
    print(Book.objects.filter(Q(id=3)|Q(title="Go"))[0])  # 查询id=3或者标题是“Go”的书
    print(Book.objects.filter(Q(price__gte=70)&Q(title__startswith="J")))  # 查询价格大于等于70并且标题是“J”开头的书
    print(Book.objects.filter(Q(title__startswith="J") & ~Q(id=3)))  # 查询标题是“J”开头并且id不是3的书
    print(Book.objects.filter(Q(price=70)|Q(title="Python"), publication_date="2017-09-26"))  # Q对象可以与关键字参数查询一起使用,必须把普通关键字查询放到Q对象查询的后面
    from django.db.models import Q
     
    con = Q()
    q1 = Q()
    q1.connector = "AND"
    q1.children.append(("email", "123@qq.com"))
    q1.children.append(("password", "abc123"))
     
    q2 = Q()
    q2.connector = "AND"
    q2.children.append(("username", "abc"))
    q2.children.append(("password", "xyz123"))
     
    con.add(q1, "OR")
    con.add(q2, "OR")
     
    obj = models.UserInfo.objects.filter(con).first()
     
    # 查询email=123@qq.com和password=abc123 或者 username=abc和password=xyz123的用户信息

    上面的例子就是一个典型的复杂查询,通过将Q对象实例化来然后增加各个条件之间的关系,而且这种写法用在你不知道用户到底会传入多少个参数的时候很方便!

  • 相关阅读:
    js数组扁平化
    react 监听页面滚动
    package.json 里的 dependencies和devDependencies区别
    背景图自适应屏幕居中显示,且不变形
    antd table 点击行触发radio 或 checkbox
    使用antd Table + mobx 处理数组 出现的一系列问题
    定时刷新页面或请求接口
    添加索引,联合唯一索引
    添加 查看 和删除 索引
    phpEXCEL如何设置单元格格式为百分比
  • 原文地址:https://www.cnblogs.com/95lyj/p/9377039.html
Copyright © 2011-2022 走看看