Python 【第十四章】django数据操作之F和Q

model操作 F/Q

F:

 

例子:如查出人名,为该人添加500工资,需要使用F功能

from django.db.models import F    #导入F
models.UserInfo.objects.filter().update(salary=F('salary')+500)   #查出该人后,F找出原来工资,再添加 500

等价与SQL语句: update userinfo set salary=salary+500 

 

 

Q:
构造搜索条件
1、传参
models.UserInfo.objects.filter(id=123,name='alex')

2、传字典
d = {'id': 123, 'name':'alex'}
models.UserInfo.objects.filter(**d)

<input name='id' />
<input name='name' />
获取用户输入,并构造成字典:
models.UserInfo.objects.filter(**c)
3、传Q对象
models.UserInfo.objects.filter(Q对象)

from django.db.models import Q

 

例子:单个条件查询

views.py

from django.shortcuts import render
from django.shortcuts import HttpResponse
from app01 import models
from django import forms

def index(request):
    # for i in range(10):
    #     models.UserType.objects.create(caption='CE'+str(i))
    # c = models.UserType.objects.all().count()
    # print(c)
    form = Indexform()
    from django.db.models import Q
    q1 = Q()
    q1.connector = 'OR'
    q1.children.append(('id',1))
    q1.children.append(('id',2))
    q1.children.append(('id',2))
    obj = models.UserType.objects.filter(q1)  #把Q查询条件引入
    for item in obj:
        print(item.id,item.caption)
    return render(request,'index.html',{'form':form})

 

浏览器输入:http://127.0.0.1:8000/index/ 后可以过滤出以下结果  

 

 

 多条件查询 

 

 views.py

from django.shortcuts import render
from django.shortcuts import HttpResponse
from app01 import models
from django import forms
def index(request):
    # for i in range(10):
    #     models.UserType.objects.create(caption='CE'+str(i))
    # c = models.UserType.objects.all().count()
    # print(c)
    form = Indexform()
    from django.db.models import Q
    # q1 = Q()
    # q1.connector = 'OR'
    # q1.children.append(('id',1))
    # q1.children.append(('id',2))
    # q1.children.append(('id',3))
    # obj = models.UserType.objects.filter(q1)  #把Q查询条件引入
    # for item in obj:
    #     print(item.id,item.caption)
    # return render(request,'index.html',{'form':form})
    con = 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(('caption', 'CE1'))
    q2.children.append(('caption', 'CE2'))

    con.add(q1, 'AND')
    con.add(q2, 'AND')

    obj = models.UserType.objects.filter(con)
    for item in obj:
        print(item.id,item.caption)

    return render(request, 'index.html', {'form': form})

 

 浏览器输入:http://127.0.0.1:8000/index/ 后可以过滤出以下结果  

 

 

posted @ 2017-01-28 23:08  杨坚  阅读(358)  评论(0编辑  收藏  举报