django 关系型数据库的关系包括三种类型:
ForeginKey: 一对多,将字段定义在多的一端中
ManyToManyField: 多对多,将字段定义在任意一端中。
OneToOneField:一对一,将字段定义在任务一端中
null 针对数据库,blank针对表单
简单的查询
django由一到多的访问语法:
‘一’这边的模型类对象.‘多’的模型类的小写_set
django由多到一的访问语法:
’多‘的模型类对象.(外键).’多‘的对应模型类的属性名
带条件的多表查询
由多模型类条件查询一模型类数据(通过多来查询一):关系模型类名小写__属性名__条件运算符=值
eg:查询图书,要求图书中的英雄的描述包含“八”
list = BookInfo.object.filter(heroinfo__hcontent__contains='八')
由一模型类条件查询多模型类数据: 语法如下:
一模型类关联属性名__一模型类属性名__条件运算符=值
例:查询书名为“天龙八部”的所有英雄。
list = HeroInfo.objects.filter(hbook__btitle='天龙八部')0
由多查一通过外键来查询,由一查多通过关系模型类名小写__属性名__条件运算符
自关联
为了充分利用数据表的大量数据存储功能,可以设计成一张表,内部的关系字段指向本表的主键,这就是自关联的表结构。
自关联是一种特殊的一对多的关系
使用自连接时要求null和blank允许为空,因为一级数据没有父类
在建立连接关系时aParent=models.ForeignKey('self',null=True blank=True) 这里的self 表示调用的外键就是调用的自己,通过自己与自己建立联系,这就是自连接
主键和外键设计在一张表中
当多查一时,可以用多的parent找到一;当一查多时,可以由一的id所对应的多的parent来调用all(注意在django中,前端all不加(),)就可以查到所有对应的多项。
django前端中all不加()
django中在views文件中HttpResponse 返回的是字符串,render返回的是模板(html)
用户发起请求后的第一件事进入到工程中的setting查找ROOT_URLCONF指定的根目录
url的两种写法
一种写法是直接在url文件中写
另一种写法是在子应用中创建子url进行调用要使用这种方法时需要在根url也就是在工程中的url 中的urlpatterns[]中写一个url(r'^index/',include('需要包含一个字符串文件名如booktest.urls'))(要用include需要先导入include,可以from django.conf.urls import url,include这种方式调用)
创建一个同include 中同字符串名的文件 在其开头导入
from django.conf.urls import url
from bookStoreApp import views
然后写urlpatterns = [
url(r'^index',views.index)
]
然后就能在网址中输入
127.0.0.1:8002/bookStoreApp/index
一这种方式来进入页面
地址传参
可以从url地址里面传参数
在url(r'^show_args/(\d+)', views.show_args)中的(\d+)表示在地址栏输完show_args后可以输入数字
然后变为(\d+)在views中show_args函数中添加一个形式参数用于接收页面上输入的数字 然后就能以格式化输出的方式输入到Httpresponse中 返回到页面 这种方式是用位置参数的方式输出
另一种方式是可以变为url(r'^show_args(?P<nid>\d+)'views.show_args) 这样在views中的show_arg一个nid的关键字参数,这样是用关键字参数的方式输出
函数中添加
<a></a>可以发起get请求 <form></form>可以发起post请求