路径:project/app/views.py
单表
from django.shortcuts import render,HttpResponse,redirect
from app import models
def business(request):
print('-----对象形式获取方式-------')
v1 = models.Business.objects.all()
print(v1)
#v1=QuerySet对象类型:
#[obj(id.caption.code),obj(id.caption.code),obj(id.caption.code)]
#对象取值方式:通过点如:v1.id
v1_1 = models.Business.objects.filter(id=1)
# 获取的是匹配的对象
v1_2 = models.Business.objects.filter(id=1).first()
# 获取是对象,但是如果不存在的话返回是None
print('-----values字典形式获取方式-------')
v2 = models.Business.objects.all().values('id','caption')
print(v2)
#values(..) :类似数据库原生sql语句:
# select * from tb 获取该表所有字段数据
# select id,caption from tb 获取id字段、caption字段数据
#v=QuerySet字典类型:
#[{'id':1,'caption':'运维部'},{'id':2,'caption':'...'}]
#字典取值方式:Python通过["key"],但是模板渲染通过点,如:v2.id
print('-----values_list元组形式获取方式-------')
v3 = models.Business.objects.all().values_list('id','caption')
print(v3)
#values(..) :类似数据库原生sql语句:
# select * from tb 获取该表所有字段数据
# select id,caption from tb 获取id字段、caption字段数据
#v=QuerySet元组类型:
#[(1,运维),(2,开发)]
# 元组取值方式:Python通过[下标],但是模板渲染通过.取值,如:v3.0
return render(request,'business.html',{'v1':v1,'v2':v2,'v3':v3})
跨表(双下划线)
from django.shortcuts import render,HttpResponse,redirect
from app import models
def host(request):
print('----外键跨表获取数据第1种方式:obj通过点.字段名方式-----')
v1 = models.Host.objects.all()
for row in v1:
print(row.nid,row.hostname,row.ip,row.port,row.b_id,
row.b,
row.b.id,row.b.caption,row.b.code,sep='\t')
#row.b 的b字段其实就是封装了外键对应Business表的主键的数据对象
#既然是对象,就可以通过点.进行调取该对象的元素
#sep='\t'没个逗号直接增加个tab空格
#打印的结果:
#1 c1.com 1.1.1.1 9900 1 Business object 1 运维部 SA
#2 c2.com 1.1.1.2 80 1 Business object 1 运维部 SA
#3 c3 1.1.1.3 90 2 Business object 1 开发部 SA
print(v1[0].b.caption)
#也通过下标获取对应的数据
#v1的整个表[(每一行数据),(每一行数据)....]
print('----外键跨表获取数据第2种方式:values字典通过双下划线__字段名方式-----')
# 外键跨表获取关联数据第二种方式:values
# (QuerySet字典类型,通过双下划线__字段名就可跨表获取数据)
v2 = models.Host.objects.filter(nid__gt=0).values('nid',
'hostname',
'b_id',
'b__caption')
for row in v2:
print(row['nid'],row['hostname'],row['b_id'],
row['b__caption'],sep='\t')
print('----外键跨表获取数据第3种方式:values_list元组通过点.下标方式-----')
# 外键跨表获取关联数据第三种方式:values__list
# (QuerySet字典类型,基于values的基础上获取指定数据后,调取方式.下标)
v3 = models.Host.objects.filter(nid__gt=0).values_list('nid',
'hostname',
'b_id',
'b__caption',
'b__code')
for row in v3:
print(row[0],row[1],row[2],row[3],row[4],sep='\t')
return render(request,'host.html',{'v1':v1,'v2':v2,'v3':v3})