
关联的查询
- 在定义模型类时,可以指定三种关联关系,最常用的是一对多关系,如本例中的“图书-英雄”就为一对多关系,接下来进入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
    






![[go] BaseCode 密码本加密 | 老司机黑话-一一网](https://www.proyy.com/skycj/data/images/2021-05-15/3f32dbf8ce16bbabe016528595a499cb.jpg)














![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)
