2.1 ORM高级—双下划线 条件查询
2.2 惰性机制(迭代/切片) F查询和Q查询
2.3 反向查找的related_name
ORM高级—双下划线 条件查询
---------------了不起的双下划线(__)之单表条件查询----------------
# models.Tb1.objects.filter(id__lt=10, id__gt=1) # 获取id大于1 且 小于10的值
# models.Tb1.objects.filter(id__in=[11, 22, 33]) # 获取id等于11、22、33的数据
# models.Tb1.objects.exclude(id__in=[11, 22, 33]) # not in
# models.Tb1.objects.filter(name__contains="ven")
# models.Tb1.objects.filter(name__icontains="ven") # icontains大小写不敏感
# models.Tb1.objects.filter(id__range=[1, 2]) # 范围bettwen and
# startswith,istartswith, endswith, iendswith,
demo_userinfo[db]
代码
import json
from django.shortcuts import render,HttpResponse,redirect
from demo import models
import datetime
\# Create your views here.
def redir(request):
print ('this is redir')
return redirect('/login')
def test(request):
dic={'a':1,'b':2}
dic_json=json.dumps(dic)
_clas='26期'
#obj=models.Class.objects.filter(name=_clas).first()
#print(obj.name,obj.sch.name)
#for item in obj_li:
# print(item.name,item.sch.name)
#for i in obj.user.all():
# print(i.name,i.username)
#obj=models.School.objects.create(name='aming_GO班')
#clas\_obj=models.Class.objects.create(name='GO\_1期',sch=obj)
#print(clas_obj.sch.name)
#models.Class.objects.filter(name=_clas).delete()
#models.Class.objects.filter(sch\_\_name='aming\_python').update(name='10期python')
#clas\_obj=models.Class.objects.filter(name=\_clas).first()
#user_obj=models.UserInfo.objects.filter(name='王五')
#clas_obj.user.clear()
#clas\_obj.user.add(*user\_obj)
#反向查询
user_obj=models.UserInfo.objects.filter(name='测试1').first()
#user\_obj.class\_set.all()
#for item in user\_obj.class\_set.all():
# print(item.name)
#class\_obj=models.Class.objects.filter(name='GO\_1期')
#反向增加
#user\_obj.class\_set.remove(*class_obj)
obj\_li=models.UserInfo.objects.filter(id\_\_gt=1,id__lt=5)
for item in obj_li:
print(item.name)
return HttpResponse(dic_json)
def login(request):
if request.method=='GET':
a=\[1,\]
obj_li=models.UserInfo.objects.all()
test= 'te st'
d=datetime.datetime.now()
for obj in obj_li:
print('username--->',obj.username)
print('password--->',obj.password)
return render(request,'login.html',locals())
#return HttpResponse('hello demo')
运行
访问127.0.0.1/t1/
代码
import json
from django.shortcuts import render,HttpResponse,redirect
from demo import models
import datetime
\# Create your views here.
def redir(request):
print ('this is redir')
return redirect('/login')
def test(request):
dic={'a':1,'b':2}
dic_json=json.dumps(dic)
_clas='26期'
#obj=models.Class.objects.filter(name=_clas).first()
#print(obj.name,obj.sch.name)
#for item in obj_li:
# print(item.name,item.sch.name)
#for i in obj.user.all():
# print(i.name,i.username)
#obj=models.School.objects.create(name='aming_GO班')
#clas\_obj=models.Class.objects.create(name='GO\_1期',sch=obj)
#print(clas_obj.sch.name)
#models.Class.objects.filter(name=_clas).delete()
#models.Class.objects.filter(sch\_\_name='aming\_python').update(name='10期python')
#clas\_obj=models.Class.objects.filter(name=\_clas).first()
#user_obj=models.UserInfo.objects.filter(name='王五')
#clas_obj.user.clear()
#clas\_obj.user.add(*user\_obj)
#反向查询
user_obj=models.UserInfo.objects.filter(name='测试1').first()
#user\_obj.class\_set.all()
#for item in user\_obj.class\_set.all():
# print(item.name)
#class\_obj=models.Class.objects.filter(name='GO\_1期')
#反向增加
#user\_obj.class\_set.remove(*class_obj)
id_li=\[1,3,5,7\]
#obj\_li=models.UserInfo.objects.filter(id\_\_gt=1,id__lt=5)
obj\_li=models.UserInfo.objects.filter(id\_\_in=id_li)
for item in obj_li:
print(item.name)
return HttpResponse(dic_json)
def login(request):
if request.method=='GET':
a=\[1,\]
obj_li=models.UserInfo.objects.all()
test= 'te st'
d=datetime.datetime.now()
for obj in obj_li:
print('username--->',obj.username)
print('password--->',obj.password)
return render(request,'login.html',locals())
#return HttpResponse('hello demo')
运行
访问127.0.0.1/t1/
代码
import json
from django.shortcuts import render,HttpResponse,redirect
from demo import models
import datetime
\# Create your views here.
def redir(request):
print ('this is redir')
return redirect('/login')
def test(request):
dic={'a':1,'b':2}
dic_json=json.dumps(dic)
_clas='26期'
#obj=models.Class.objects.filter(name=_clas).first()
#print(obj.name,obj.sch.name)
#for item in obj_li:
# print(item.name,item.sch.name)
#for i in obj.user.all():
# print(i.name,i.username)
#obj=models.School.objects.create(name='aming_GO班')
#clas\_obj=models.Class.objects.create(name='GO\_1期',sch=obj)
#print(clas_obj.sch.name)
#models.Class.objects.filter(name=_clas).delete()
#models.Class.objects.filter(sch\_\_name='aming\_python').update(name='10期python')
#clas\_obj=models.Class.objects.filter(name=\_clas).first()
#user_obj=models.UserInfo.objects.filter(name='王五')
#clas_obj.user.clear()
#clas\_obj.user.add(*user\_obj)
#反向查询
user_obj=models.UserInfo.objects.filter(name='测试1').first()
#user\_obj.class\_set.all()
#for item in user\_obj.class\_set.all():
# print(item.name)
#class\_obj=models.Class.objects.filter(name='GO\_1期')
#反向增加
#user\_obj.class\_set.remove(*class_obj)
#id_li=\[1,3,5,7\]
#obj\_li=models.UserInfo.objects.filter(id\_\_gt=1,id__lt=5)
obj\_li=models.UserInfo.objects.filter(name\_\_contains='est')
for item in obj_li:
print(item.name)
return HttpResponse(dic_json)
def login(request):
if request.method=='GET':
a=\[1,\]
obj_li=models.UserInfo.objects.all()
test= 'te st'
d=datetime.datetime.now()
for obj in obj_li:
print('username--->',obj.username)
print('password--->',obj.password)
return render(request,'login.html',locals())
#return HttpResponse('hello demo')
运行
访问127.0.0.1/t1/
代码
import json
from django.shortcuts import render,HttpResponse,redirect
from demo import models
import datetime
\# Create your views here.
def redir(request):
print ('this is redir')
return redirect('/login')
def test(request):
dic={'a':1,'b':2}
dic_json=json.dumps(dic)
_clas='26期'
#obj=models.Class.objects.filter(name=_clas).first()
#print(obj.name,obj.sch.name)
#for item in obj_li:
# print(item.name,item.sch.name)
#for i in obj.user.all():
# print(i.name,i.username)
#obj=models.School.objects.create(name='aming_GO班')
#clas\_obj=models.Class.objects.create(name='GO\_1期',sch=obj)
#print(clas_obj.sch.name)
#models.Class.objects.filter(name=_clas).delete()
#models.Class.objects.filter(sch\_\_name='aming\_python').update(name='10期python')
#clas\_obj=models.Class.objects.filter(name=\_clas).first()
#user_obj=models.UserInfo.objects.filter(name='王五')
#clas_obj.user.clear()
#clas\_obj.user.add(*user\_obj)
#反向查询
user_obj=models.UserInfo.objects.filter(name='测试1').first()
#user\_obj.class\_set.all()
#for item in user\_obj.class\_set.all():
# print(item.name)
#class\_obj=models.Class.objects.filter(name='GO\_1期')
#反向增加
#user\_obj.class\_set.remove(*class_obj)
#id_li=\[1,3,5,7\]
#obj\_li=models.UserInfo.objects.filter(id\_\_gt=1,id__lt=5)
obj\_li=models.UserInfo.objects.filter(name\_\_startswith='z')
for item in obj_li:
print(item.name)
return HttpResponse(dic_json)
def login(request):
if request.method=='GET':
a=\[1,\]
obj_li=models.UserInfo.objects.all()
test= 'te st'
d=datetime.datetime.now()
for obj in obj_li:
print('username--->',obj.username)
print('password--->',obj.password)
return render(request,'login.html',locals())
#return HttpResponse('hello demo')
运行
访问127.0.0.1/t1/
代码
import json
from django.shortcuts import render,HttpResponse,redirect
from demo import models
import datetime
\# Create your views here.
def redir(request):
print ('this is redir')
return redirect('/login')
def test(request):
dic={'a':1,'b':2}
dic_json=json.dumps(dic)
_clas='26期'
#obj=models.Class.objects.filter(name=_clas).first()
#print(obj.name,obj.sch.name)
#for item in obj_li:
# print(item.name,item.sch.name)
#for i in obj.user.all():
# print(i.name,i.username)
#obj=models.School.objects.create(name='aming_GO班')
#clas\_obj=models.Class.objects.create(name='GO\_1期',sch=obj)
#print(clas_obj.sch.name)
#models.Class.objects.filter(name=_clas).delete()
#models.Class.objects.filter(sch\_\_name='aming\_python').update(name='10期python')
#clas\_obj=models.Class.objects.filter(name=\_clas).first()
#user_obj=models.UserInfo.objects.filter(name='王五')
#clas_obj.user.clear()
#clas\_obj.user.add(*user\_obj)
#反向查询
user_obj=models.UserInfo.objects.filter(name='测试1').first()
#user\_obj.class\_set.all()
#for item in user\_obj.class\_set.all():
# print(item.name)
#class\_obj=models.Class.objects.filter(name='GO\_1期')
#反向增加
#user\_obj.class\_set.remove(*class_obj)
#id_li=\[1,3,5,7\]
#obj\_li=models.UserInfo.objects.filter(id\_\_gt=1,id__lt=5)
obj\_li=models.UserInfo.objects.filter(username\_\_endswith='t')
for item in obj_li:
print(item.name)
return HttpResponse(dic_json)
def login(request):
if request.method=='GET':
a=\[1,\]
obj_li=models.UserInfo.objects.all()
test= 'te st'
d=datetime.datetime.now()
for obj in obj_li:
print('username--->',obj.username)
print('password--->',obj.password)
return render(request,'login.html',locals())
#return HttpResponse('hello demo')
运行
访问127.0.0.1/t1
惰性机制(迭代/切片) F查询和Q查询
切片
demo_userinfo[db]
代码
import json
from django.shortcuts import render,HttpResponse,redirect
from demo import models
\# Create your views here.
def redir(request):
print('this is redir')
return redirect('/login/')
def test(request):
dic={'a':1,'b':2}
dic_json=json.dumps(dic)
_clas = '26期'
obj=models.UserInfo.objects.all()
for item in obj:
print(itme.name)
return HttpResponse(dic_json)
def login(request):
if request.method=='GET':
a=\[1,\]
# obj\_li=models.UserInfo.objects.all() # 查询所有 #querset\_list
obj\_li=models.UserInfo.objects.all() #querset\_list
test='te st'
t='test'
import datetime
d=datetime.datetime.now()
# for obj in obj_li:
# print('username--->',obj.username)
# print('password--->',obj.password)
# return render(request,'login.html',{'data':data,'msg':msg})
return render(request,'login.html',locals())
# return HttpResponse('hello demo')
运行
访问127.0.0.1/t1/
views.py修改
代码
import json
from django.shortcuts import render,HttpResponse,redirect
from demo import models
import datetime
\# Create your views here.
def redir(request):
print ('this is redir')
return redirect('/login')
def test(request):
dic={'a':1,'b':2}
dic_json=json.dumps(dic)
_clas='26期'
obj=models.UserInfo.objects.all()
for item in obj\[1:3\]:
print(item.name)
return HttpResponse(dic_json)
def login(request):
if request.method=='GET':
a=\[1,\]
obj_li=models.UserInfo.objects.all()
test= 'te st'
d=datetime.datetime.now()
for obj in obj_li:
print('username--->',obj.username)
print('password--->',obj.password)
return render(request,'login.html',locals())
#return HttpResponse('hello demo')
运行
访问127.0.0.1/t1
F查询
demo_userinfo[db]
所有Password 加1000
导入模块
from django.bd.models import F
代码
import json
from django.shortcuts import render,HttpResponse,redirect
from demo import models
import datetime
\# Create your views here.
def redir(request):
print ('this is redir')
return redirect('/login')
def test(request):
dic={'a':1,'b':2}
dic_json=json.dumps(dic)
_clas='26期'
from django.db.models import F
models.UserInfo.objects.update(password=F('password')+1000)
return HttpResponse(dic_json)
def login(request):
if request.method=='GET':
a=\[1,\]
obj_li=models.UserInfo.objects.all()
test= 'te st'
d=datetime.datetime.now()
for obj in obj_li:
print('username--->',obj.username)
print('password--->',obj.password)
return render(request,'login.html',locals())
#return HttpResponse('hello demo')
运行
访问127.0.0.1/t1
Q查询
或查询
demo_userinfo [db]
导入模块
from django.db.models import Q
代码
import json
from django.shortcuts import render,HttpResponse,redirect
from demo import models
import datetime
\# Create your views here.
def redir(request):
print ('this is redir')
return redirect('/login')
def test(request):
dic={'a':1,'b':2}
dic_json=json.dumps(dic)
_clas='26期'
from django.db.models import Q
obj=models.UserInfo.objects.filter(Q(username\_\_startswith='t')|Q(username\_\_endswith='c'))
for item in obj:
print(item.name)
return HttpResponse(dic_json)
def login(request):
if request.method=='GET':
a=\[1,\]
obj_li=models.UserInfo.objects.all()
test= 'te st'
d=datetime.datetime.now()
for obj in obj_li:
print('username--->',obj.username)
print('password--->',obj.password)
return render(request,'login.html',locals())
#return HttpResponse('hello demo')
Q()|Q() | 表示或
运行
访问127.0.0.1/t1
与查询
代码
import json
from django.shortcuts import render,HttpResponse,redirect
from demo import models
import datetime
\# Create your views here.
def redir(request):
print ('this is redir')
return redirect('/login')
def test(request):
dic={'a':1,'b':2}
dic_json=json.dumps(dic)
_clas='26期'
from django.db.models import Q
obj=models.UserInfo.objects.filter(Q(username\_\_startswith='t'),Q(username\_\_endswith='t'))
for item in obj:
print(item.name)
return HttpResponse(dic_json)
def login(request):
if request.method=='GET':
a=\[1,\]
obj_li=models.UserInfo.objects.all()
test= 'te st'
d=datetime.datetime.now()
for obj in obj_li:
print('username--->',obj.username)
print('password--->',obj.password)
return render(request,'login.html',locals())
#return HttpResponse('hello demo')
Q(),Q() ,表示与
运行
访问127.0.0.1/t1
反向查找的related_name
clauser 代替了 类名(小写)_set
代码
from django.db import models
\# Create your models here.
class Number(models.Model):
num=models.OneToOneField(to='UserInfo',verbose\_name='学号',on\_delete=models.CASCADE)
def \_\_str\_\_(self):
return self.num
class UserInfo(models.Model):
name = models.CharField(max\_length=32, null=True, verbose\_name='姓名')
username=models.CharField(max_length=32,null=True)
password=models.CharField(max_length=32,null=True)
# num=models.IntegerField(default=0)
def func(self):
return 'aming_python'
def \_\_str\_\_(self):
return self.username
class School(models.Model):
name=models.CharField(max\_length=128,null=True,blank=True,verbose\_name='名字')
#mac = models.URLField(max\_length=128, default='1', verbose\_name='地址')
#email = models.EmailField(max\_length=128, null=True, blank=True, verbose\_name='邮箱')
#true\_fal = models.BooleanField(max\_length=128, null=True, blank=True, verbose_name='是否')
#date = models.DateField(verbose_name='时间')
#cla=models.ForeignKey(to='Class',default=1,on_delete=models.CASCADE)
# models.OneToOneField(to='Class' ,verbose_name=)
def \_\_str\_\_(self):
return self.name
class Class(models.Model): #create class\_to\_userinfor -->UserInfo\_id Class\_id
sch = models.ForeignKey(to='School', default=1,on\_delete=models.CASCADE) # cla\_id
name = models.CharField(max\_length=128, null=True, blank=True, verbose\_name='名字')
user=models.ManyToManyField(to='UserInfo',related_name='clauser')
def \_\_str\_\_(self):
return self.name
(venv) C:\Users\shenj\PycharmProjects\Django01>python manage.py makemigrations
(venv) C:\Users\shenj\PycharmProjects\Django01>python manage.py migrate
代码
import datetime
\# Create your views here.
def redir(request):
print ('this is redir')
return redirect('/login')
def test(request):
dic={'a':1,'b':2}
dic_json=json.dumps(dic)
_clas='26期'
user_obj=models.UserInfo.objects.filter(name='测试1').first()
for item in user_obj.clauser.all():
print(item.name)
return HttpResponse(dic_json)
def login(request):
if request.method=='GET':
a=\[1,\]
obj_li=models.UserInfo.objects.all()
test= 'te st'
d=datetime.datetime.now()
for obj in obj_li:
print('username--->',obj.username)
print('password--->',obj.password)
return render(request,'login.html',locals())
#return HttpResponse('hello demo')
运行
访问127.0.0.1/t1