day20-django orm 一对多表结构,获取的3中方式

一、前言

之前我们获取表单,获取的类型都是以对象方式获取,还有之前我们写url的时候,如果是用re_path方式写的路由的话,在最后最好加上一个结尾符$:

1
2
3
4
5
6
7
from django.urls import path,re_path
from app01 import views
 
urlpatterns = [
    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>

  结果

 

三、总结

  1. models.Business.objects.all() 以对象形式获取
  2. models.Business.objects.values()字典方式获取
  3. models.Business.objects.values_list()元组方式获取
  4. 以上三种获取的对象都是QuerySet类型
  5. #获取到一个对象
    models.Business.objects.get(id=1)
    #如果没有数据就出错,所以改造成下面的方式
    print(models.Business.objects.filter(id=10).first())
    #如果存在就方法 obj ,如果不存在就返回none
posted @ 2018-07-20 10:53  东郭仔  阅读(128)  评论(0)    收藏  举报