Django ORM 一对多跨表操作
效果:
主要代码:
def business(request):
v1 = models.Business.objects.all()
v2 = models.Business.objects.all().values('id','caption')
v3 = models.Business.objects.all().values_list('id','caption')
return render(request,'business.html',{'v1':v1,'v2':v2,'v3':v3})
def host(request):
v1 = models.Host.objects.filter(nid__gt=0)
# for row in v1:
# print(row.nid,row.hostname,row.ip,row.port,row.b_id,row.b.caption,row.b.code,row.b.id)
v2 = models.Host.objects.filter(nid__gt=0).values('nid','hostname','b_id','b__caption') #这行代码中如果想跨表 都是双下划线 __
# print('v2:',v2)
for row in v2:
print(row['nid'],row['hostname'],row['b_id'],row['b__caption'])
v3 = models.Host.objects.filter(nid__gt=0).values_list('nid','hostname','b_id','b__caption') #这行代码中如果想跨表 都是双下划线 __
return render(request,'host.html',{'v1':v1,'v2':v2,'v3':v3})
host.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>主机列表</h1>
<table border = "1">
<thead>
<tr>
<th>主机名</th>
<th>IP</th>
<th>端口</th>
<th>业务线名称</th>
</tr>
</thead>
<tbody>
{% for row in v1 %}
<tr hid = "{{row.nid}}" bid = "{{row.b_id}}">
<td>{{row.hostname}}</td>
<td>{{row.ip}}</td>
<td>{{row.port}}</td>
<td>{{row.b.caption}}</td>
</tr>
{% endfor %}
</tbody>
</table>
<h1>业务线列表(元组)</h1>
<table border = "1">
<thead>
<tr>
<th>主机名</th>
<th>业务线名称</th>
</tr>
</thead>
<tbody>
{% for row in v2 %}
<tr hid = "{{row.nid}}" bid = "{{row.b_id}}">
<td>{{row.hostname}}</td>
<td>{{row.b__caption}}</td>
</tr>
{% endfor %}
</tbody>
</table>
<h1>业务线列表(字典)</h1>
<table border = "1">
<thead>
<tr>
<th>主机名</th>
<th>业务线名称</th>
</tr>
</thead>
<tbody>
{% for row in v3 %}
<tr hid = "{{row.0}}" bid = "{{row.2}}">
<td>{{row.1}}</td>
<td>{{row.3}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>
源码
链接:https://pan.baidu.com/s/1XBbxaaDE8rsOgWvn1qyrtA
提取码:2xw6