django獲取單表數據的三種方式
v1 = models.Business.objects.all()
# v1是QuerySet的列表 ,內部元素都是對象
v2 = models.Business.objects.all().values('id','caption') //這里不加all()也可以
# v2是QuerySet的列表 ,內部元素都是字典
v3 = models.Business.objects.all().values_list('id','caption') //這里不加all()也可以
# v3是QuerySet的列表 ,內部元素都是元組
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') print(v1,v2,v3) return render(request, 'business.html', {'v1': v1, 'v2': v2, 'v3': v3})
business.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <h1>業務線列表(對象)</h1> <ul> {% for row in v1 %} <li>{{ row.id }} - {{ row.caption }} - {{ row.code }}</li> {% endfor %} </ul> <h1>業務線列表(字典)</h1> <ul> {% for row in v2 %} <li>{{ row.id }} - {{ row.caption }}</li> {% endfor %} </ul> <h1>業務線列表(元組)</h1> <ul> {% for row in v3 %} <li>{{ row.0 }} - {{ row.1 }}</li> {% endfor %} </ul> </body> </html>
獲取一個對象
方法一:如果存在就返回一個對象,如果不存在就報錯,不推薦
models.Business.objects.get(id=1)
方法二:如果存在就返回一個對象,不存在就返回none,推薦
models.Business.objects.filter(id=1).first()
外鍵:
class Business(models.Model): caption = models.CharField(max_length=32) code = models.CharField(max_length=32,null=True,default='SA') class Host(models.Model): id = models.AutoField(primary_key=True) hostname = models.CharField(max_length=32) ip = models.GenericIPAddressField(protocol='ipv4') port = models.IntegerField() b = models.ForeignKey(to='Business',to_field='id')
v = models.Host.objects.filter(nid__gt=0)
v[0].b.caption ----> 通過點(.)進行跨表
實例:跨表查詢的三種方式
def host(request): host_obj = models.Host.objects.all() host_obj2 = models.Host.objects.filter(b__caption='運維').values('id','hostname','ip','port','b__code') for i in host_obj2: print(i['id'],i['hostname'],i['ip'],i['port'],i['b__code']) host_obj3 = models.Host.objects.filter(b__caption='運維').values_list('id', 'hostname', 'ip', 'port', 'b__code') return render(request,'host.html',{'host_obj':host_obj,'host_obj2':host_obj2,'host_obj3':host_obj3})
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h2>對象</h2> <table border="1px"> <thead> <tr> <th>ID</th> <th>主機名</th> <th>ip</th> <th>port</th> <th>業務線</th> <th>業務線編碼</th> </tr> </thead> <tbody> {% for i in host_obj %} <tr hid="{{ i.id }}" bid="{{ i.b_id }}"> <td>{{ forloop.counter }}</td> <td>{{ i.hostname }}</td> <td>{{ i.ip }}</td> <td>{{ i.port }}</td> <td>{{ i.b.caption }}</td> <td>{{ i.b.code }}</td> </tr> {% endfor %} </tbody> </table> <h2>字典</h2> <table border="1px"> <thead> <tr> <th>ID</th> <th>主機名</th> <th>ip</th> <th>port</th> <th>業務線編碼</th> </tr> </thead> <tbody> {% for i in host_obj2 %} <tr hid="{{ i.id }}" bid="{{ i.b_id }}"> <td>{{ forloop.counter }}</td> <td>{{ i.hostname }}</td> <td>{{ i.ip }}</td> <td>{{ i.port }}</td> <td>{{ i.b__code }}</td> </tr> {% endfor %} </tbody> </table> <h2>元組</h2> <table border="1px"> <thead> <tr> <th>ID</th> <th>主機名</th> <th>ip</th> <th>port</th> <th>業務線編碼</th> </tr> </thead> <tbody> {% for i in host_obj3 %} <tr hid="{{ i.0 }}" bid="{{ i.b_id }}"> <td>{{ forloop.counter }}</td> <td>{{ i.1 }}</td> <td>{{ i.2 }}</td> <td>{{ i.3 }}</td> <td>{{ i.4 }}</td> </tr> {% endfor %} </tbody> </table> </body> </html>