关联的查询
- 在定义模型类时,可以指定三种关联关系,最常用的是一对多关系,如本例中的“图书-英雄”就为一对多关系,接下来进入shell练习关系的查询
python manage.py shell
复制代码
- 查询编号为1的图书
book=BookInfo.books.get(pk=1)
复制代码
- 获得book图书的所有英雄
book.heroinfo_set.all()
复制代码
- 获得编号为4的英雄
hero=HeroInfo.objects.get(hbook_id=3)
复制代码
- 获得hero英雄出自的图书
hero.hbook
复制代码
自关联
- 对于地区信息、分类信息等数据,表结构非常类似,每个表的数据量十分有限,为了充分利用数据表的大量数据存储功能,可以可以设计成一张表,内部的关系字段指向本表的主键,这就是自关联的表结构
- 打开booktest/models.py文件,定义AreaInfo类
- 说明:关系属性使用self指向本类,要求null和blank允许为空,因为一级数据是没有父级的
#定义地区模型类,存储省、市、区县信息
class AreaInfo(models.Model):
atitle=models.CharField(max_length=30)#名称
aParent=models.ForeignKey('self',null=True,blank=True)#关系
复制代码
- 迁移
python manage.py makemigrations
python manage.py migrate
复制代码
- 打开mysql命令行,导入数据
source areas.sql
复制代码
- 打开booktest/views.py文件,定义视图area
from models import AreaInfo
...
#查询广州市的信息
def area(request):
area = AreaInfo.objects.get(pk=440100)
return render(request, 'booktest/area.html', {'area': area})
复制代码
- 打开booktest/urls.py文件,新建一条url
urlpatterns = [
...
url(r'^area/$', views.area),
]
复制代码
- 在templates/booktest目录下,新建area.html文件
<html>
<head>
<title>地区</title>
</head>
<body>
当前地区:{{area.atitle}}
<hr/>
上级地区:{{area.aParent.atitle}}
<hr/>
下级地区:
<ul>
{%for a in area.areainfo_set.all%}
<li>{{a.atitle}}</li>
{%endfor%}
</ul>
</body>
</html>
复制代码
- 运行服务器
python manage.py runserver
复制代码
注意:各位看官这些文章发布当在案例可能会出现BUG,还有一个Django版本的问题,和Python的版本搭配,要注意的,如有什么问题请各位指教
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END