day20-django orm 一对多表结构,获取的3中方式
一、前言
之前我们获取表单,获取的类型都是以对象方式获取,还有之前我们写url的时候,如果是用re_path方式写的路由的话,在最后最好加上一个结尾符$:
|
1
2
3
4
5
6
7
|
from django.urls import path,re_pathfrom app01 import viewsurlpatterns = [ re_path('^business/$',views.business) #如果不加$的话,下面的business_add这个链接就访问不到了,直接被第一个拦截了 re_path('^business_add',views.business)] |
如果不这样的写话的,那么下面有business开头的路由全部访问不到,因为全部被第一个拦截了。
二、获取表单数据的三种方式
本质就是 查询数据库的三种方法,及得到样式
models
1 class Business(models.Model): 2 #ID 3 caption=models.CharField(max_length=32) 4 code=models.CharField(max_length=32,null=True,default="sa") 5 6 class Hostb(models.Model): 7 nid=models.AutoField(primary_key=True) 8 hostname=models.CharField(max_length=32,db_index=True) 9 ip=models.GenericIPAddressField(protocol="ipv4",db_index=True) 10 port=models.IntegerField() 11 b=models.ForeignKey(to="Business",to_field="id",on_delete=models.CASCADE)
views
1 from app01 import models 2 def business(renquest): 3 #第一种方式 4 v1=models.Business.objects.all() 5 #queryset 6 #[obj1,obj2] 7 #第二种方式 8 v2=models.Business.objects.all().values("id","caption") 9 #queryset 10 #[{"id"}:1,"caption":11],...] 11 12 v3=models.Business.objects.all().values_list("id","caption") 13 #queryset 14 #[(1,研发),(2,市场)] 15 return render(renquest,"business.html",{"v":v1,"v2":v2,"v3":v3})
前端bussiness.html
1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="UTF-8"> 5 <title></title> 6 </head> 7 <body> 8 <h1>业务线列表</h1> 9 <ul> 10 {% for row in v %} 11 <li>{{ row.id }}-{{ row.caption }}-{{ row.code }}</li> 12 {% endfor %} 13 </ul> 14 15 <h1>业务线列表 方式二 取部分元素,字典样式</h1> 16 <ul> 17 {% for row in v2 %} 18 <li>{{ row.id }}-{{ row.caption }}</li> 19 {% endfor %} 20 </ul> 21 22 23 <h1>业务线列表 方式三,取部分元素,元祖</h1> 24 <ul> 25 {% for row in v3 %} 26 <li>{{ row.0 }}-{{ row.1}}</li> 27 {% endfor %} 28 </ul> 29 30 31 </body> 32 </html>
结果

三、总结
-
models.Business.objects.all() 以对象形式获取
-
models.Business.objects.values()字典方式获取
-
models.Business.objects.values_list()元组方式获取
- 以上三种获取的对象都是QuerySet类型
-
#获取到一个对象
models.Business.objects.get(id=1)
#如果没有数据就出错,所以改造成下面的方式
print(models.Business.objects.filter(id=10).first())
#如果存在就方法 obj ,如果不存在就返回none

浙公网安备 33010602011771号