html 遍历元组queryset,Django之Model操作之单表及跨表(双下划线)的3种不同方式获取数据(queryset对象列表、字典、元祖)【ORM篇七】...

路径: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})

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值