Python自动化之django orm之Q对象

什么是Q对象?

Encapsulates filters as objects that can then be combined logically (using& and |)

关联查询

Poll.objects.get(
Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)),
question__startswith='Who')

AND AND

def ceshi(request):
from app01 import models
from django.db.models import Q
conn = Q() # 大Q对象
q1 = Q() # 小Q对象 # 下面都是或的关系
q1.connector='OR'
q1.children.append(('id', 1))
q1.children.append(('id', 2))
q1.children.append(('id', 3)) #这个q2也是小Q
q2 = Q()
q2.connector = 'OR'
q2.children.append(('name', 'wo'))
conn.add(q1, 'AND')
print(conn)
print('------')
conn.add(q2, 'AND')
print(conn)
print(q1)
a = models.User.objects.filter(conn)
print(a.values())
return HttpResponse('ok')

结果

(AND: (OR: ('id', 1), ('id', 2), ('id', 3)))
------
(AND: (OR: ('id', 1), ('id', 2), ('id', 3)), ('name', 'wo'))

AND OR

from django.shortcuts import render, HttpResponse
from django.core.exceptions import NON_FIELD_ERRORS
# Create your views here. from django import forms
from django.forms import fields
from django.forms import widgets class User(forms.Form):
usertype = fields.ChoiceField(
choices=[],
widget=widgets.Select ) def __init__(self,*args,**kwargs):
super(User,self).__init__(*args,**kwargs)
print(self.fields['usertype'])
print(type(self.fields['usertype']))
# print(dir()) def ceshi(request):
from app01 import models
from django.db.models import Q
conn = Q()
q1 = Q()
q1.connector='OR'
q1.children.append(('id', 1))
q1.children.append(('id', 2))
q1.children.append(('id', 3)) q2 = Q()
q2.connector = 'OR'
q2.children.append(('name', 'wo'))
conn.add(q1, 'AND')
print(conn)
print('------')
conn.add(q2, 'OR')
print(conn) a = models.User.objects.filter(conn)
return HttpResponse('ok')

结果

(AND: (OR: ('id', 1), ('id', 2), ('id', 3)))
------
(OR: (AND: (OR: ('id', 1), ('id', 2), ('id', 3))), (OR: ('name', 'wo')))

Python自动化之django orm之Q对象的更多相关文章

  1. Python自动化之django的ORM

    django ORM操作 1.什么是ORM? ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作 ...

  2. python web框架Django——ORM

    ORM简介 MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库 ORM是“对象-关系-映射”的简称 ...

  3. 在Django中使用Q()对象

    转载于:  http://www.smallerpig.com/1000.html 问题 一般我们在Django程序中查询数据库操作都是在QuerySet里进行进行,例如下面代码: >>& ...

  4. Django ORM 之基于对象、双下划线查询

    返回ORM目录 Django ORM 内容目录: 一. 基于对象的表查询 二. 基于双下划线的查询 三. 聚合查询 aggregate 四. 分组查询 annotate 一. 基于对象的表查询 1.正 ...

  5. Python自动化之django的ORM操作——Python源码

    """ The main QuerySet implementation. This provides the public API for the ORM. " ...

  6. Python自动化开发 - Django【进阶篇】

    Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行 ...

  7. Python自动化开发 - Django【基础篇】

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为: 大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能 ...

  8. Python自动化开发 - Django基础

    本节内容 一.什么是web框架 二.MVC和MTV视图 三.Django基本命令 四.路由配置系统 五.编写视图 六.Template 七.ORM 一.什么是web框架 对于所有的web应用,本质上其 ...

  9. Python自动化之Django的CSRF

    什么CSRF? CSRF, Cross Site Request Forgery, 跨站点伪造请求.举例来讲,某个恶意的网站上有一个指向你的网站的链接,如果 某个用户已经登录到你的网站上了,那么当这个 ...

随机推荐

  1. Top K Frequent Elements 前K个高频元素

    Top K Frequent Elements 347. Top K Frequent Elements [LeetCode] Top K Frequent Elements 前K个高频元素

  2. css画一个提示框

    用css画一个如下图的提示框: 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta c ...

  3. Javascript中的bind详解

    前言 用过React的同学都知道,经常会使用bind来绑定this. import React, { Component } from 'react'; class TodoItem extends ...

  4. CCIE

    400-251:    CCIE  Security Written

  5. Difference between 'SAME' and 'VALID' padding

    Difference between 'SAME' and 'VALID' padding 'SAME' padding 和 'VALID' padding 的区别 If you like ascii ...

  6. iPhone越狱cydia源大全

    越狱后如何添加cydia源及cydia源大全,希望对大家能有所帮助! 工具/原料 cydia 步骤/方法 越狱后添加cydia源 进入Cydia管理中找到软件源,先添加源. 进入“软件源”之后点击右上 ...

  7. 带你从零学ReactNative开发跨平台App开发[react native SqlLite 终极运用](十二)

    ReactNative跨平台开发系列教程: 带你从零学ReactNative开发跨平台App开发(一) 带你从零学ReactNative开发跨平台App开发(二) 带你从零学ReactNative开发 ...

  8. PHP二维数据排序,二维数据模糊查询

    一.因为项目中的一个报表需要合并三个表的数据,所以分表查询再合并数据,利用PHP数组函数进行排序,搜索.三表合并后的数组结构如下: Array ( [0] => Array ( [history ...

  9. 短时傅里叶变换(Short Time Fourier Transform)原理及 Python 实现

    原理 短时傅里叶变换(Short Time Fourier Transform, STFT) 是一个用于语音信号处理的通用工具.它定义了一个非常有用的时间和频率分布类, 其指定了任意信号随时间和频率变 ...

  10. 用C#自定义一个简单的集合

    闲来无聊来自己做了一个简单的'集合',用来加深自己对集合的理解 class listNode { private object value; public listNode(object _value ...