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/ 后可以过滤出以下结果