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

 

 

转载于:https://www.cnblogs.com/yaabb163/p/6354608.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值