关联的查询
- 在定义模型类时,可以指定三种关联关系,最常用的是一对多关系,如本例中的“图书-英雄”就为一对多关系,接下来进入shell练习关系的查询
python manage.py shell
book=BookInfo.books.get(pk=1)
book.heroinfo_set.all()
hero=HeroInfo.objects.get(pk=1)
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
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