Django框架(七):模型(三) 关联、模型类的属性

1. 关联

1.1 模型类关系

关系型数据库的关系包括三种类型:

  • ForeignKey:一对多,将字段定义在多的一端中。
  • ManyToManyField:多对多,将字段定义在任意一端中。
  • OneToOneField:一对一,将字段定义在任意一端中。

1.1.1 一对多关系

1#定义图书模型类BookInfo 2class BookInfo(models.Model): 3 btitle = models.CharField(max_length=20)#图书名称 4 bpub_date = models.DateField()#发布日期 5 bread = models.IntegerField(default=0)#阅读量 6 bcomment = models.IntegerField(default=0)#评论量 7 isDelete = models.BooleanField(default=False)#逻辑删除 8 9#定义角色模型类RoleInfo 10class RoleInfo(models.Model): 11 rname = models.CharField(max_length=20)#角色姓名 12 rgender = models.BooleanField(default=True)#角色性别 13 isDelete = models.BooleanField(default=False)#逻辑删除 14 rcomment = models.CharField(max_len角色与图书表的关系为一对多,所以属性定义在角色模型类中

1.1.2 多对多关系

我们下面设计一个新闻类和新闻类型类,一个新闻类型下可以用很多条新闻,一条新闻也可能归属于多种新闻类型。

1class TypeInfo(models.Model): 2 tname = models.CharField(max_length=20) #新闻类别 3 4class NewsInfo(models.Model): 5 ntitle = models.CharField(max_length=60) #新闻标题 6 ncontent = models.TextField() #新闻内容 7 npub_date = models.DateTimeField(auto_now_add=True) #新闻发布时间 8 ntype = models.ManyToManyField('TypeInfo') #通过ManyToManyField建立TypeInfo类和NewsInfo类之间多对多的关系

1.2 关联查询

Django中也能实现类似于join查询。

1.2.1 通过对象执行关联查询

在定义模型类时,可以指定三种关联关系,最常用的是一对多关系,例如“图书-角色”就是一对多关系。

1#一对应的模型类对象.多对应的模型类名小写_set 2 3b = BookInfo.objects.get(id=1) 4b.heroinfo_set.all()

由多到一的访问语法:

1#多对应的模型类对象.多对应的模型类中的关系类属性名 2 3r = RoleInfo.objects.get(id=1) 4r.rbook

访问一对应的模型类关联对象的id语法:

1#多对应的模型类对象.关联类属性_id 2 3r = RoleInfo.objects.get(id=1) 4r.book_id

例:查询编号为1的图书。

book=BookInfo.objects.get(pk=1)

例:获得book图书的所有角色。

book.roleinfo_set.all()

例:获得编号为1的角色。

role=RoleInfo.objects.get(pk=1)

例:获得role角色出自的图书。

role.rbook

1.2.2 通过模型类执行关联查询

由多模型类条件查询一模型类数据:

语法如下:

关联模型类名小写__属性名__条件运算符=值

如果没有"__运算符"部分,表示等于,结果和sql中的inner join相同。

例:查询图书,要求图书中英雄的描述包含'韩'。

list = BookInfo.objects.filter(heroinfo__hcontent__contains='韩')

由一模型类条件查询多模型类数据:

语法如下:

一模型类关联属性名__一模型类属性名__条件运算符=值

例:查询书名为“斗罗大陆”的所有英雄。

list = HeroInfo.objects.filter(hbook__btitle='斗罗大陆')

1.3 自关联

对于地区信息、分类信息等数据,表结构非常类似,每个表的数据量十分有限,为了充分利用数据表的大量数据存储功能,可以设计成一张表,内部的关系字段指向本表的主键,这就是自关联的表结构。

打开booktest/models.py文件,定义AreaInfo类。

关系属性使用self指向本类,要求null和blank允许为空,因为一级数据是没有父级的。

1#定义地区模型类,存储省、市、区县信息 2class AreaInfo(models.Model): 3 atitle=models.CharField(max_length=30)#名称 4 aParent=models.ForeignKey('self',null=True,blank=True)#关系

迁移。

1python manage.py makemigrations 2python manage.py migrate

打开mysql命令行,导入数据。

1INSERT INTO booktest_areainfo VALUES ('440000', '广东省', NULL); 2INSERT INTO booktest_areainfo VALUES ('440100', '广州市', '440000'); 3INSERT INTO booktest_areainfo VALUES ('440103', '荔湾区', '440100'); 4INSERT INTO booktest_areainfo VALUES ('440104', '越秀区', '440100'); 5INSERT INTO booktest_areainfo VALUES ('440105', '海珠区', '440100'); 6INSERT INTO booktest_areainfo VALUES ('440106', '天河区', '440100'); 7INSERT INTO booktest_areainfo VALUES ('440111', '白云区', '440100'); 8INSERT INTO booktest_areainfo VALUES ('440112', '黄埔区', '440100'); 9INSERT INTO booktest_areainfo VALUES ('440113', '番禺区', '440100'); 10INSERT INTO booktest_areainfo VALUES ('440114', '花都区', '440100'); 11INSERT INTO booktest_areainfo VALUES ('440115', '南沙区', '440100'); 12INSERT INTO booktest_areainfo VALUES ('440116', '萝岗区', '440100'); 13INSERT INTO booktest_areainfo VALUES ('440183', '增城市', '440100'); 14INSERT INTO booktest_areainfo VALUES ('440184', '从化市', '440100'); 15INSERT INTO booktest_areainfo VALUES ('440200', '韶关市', '440000'); 16INSERT INTO booktest_areainfo VALUES ('440203', '武江区', '440200'); 17INSERT INTO booktest_areainfo VALUES ('440204', '浈江区', '440200'); 18INSERT INTO booktest_areainfo VALUES ('440205', '曲江区', '440200'); 19INSERT INTO booktest_areainfo VALUES ('440222', '始兴县', '440200'); 20INSERT INTO booktest_areainfo VALUES ('440224', '仁化县', '440200'); 21INSERT INTO booktest_areainfo VALUES ('440229', '翁源县', '440200'); 22INSERT INTO booktest_areainfo VALUES ('440232', '乳源瑶族自治县', '440200'); 23INSERT INTO booktest_areainfo VALUES ('440233', '新丰县', '440200'); 24INSERT INTO booktest_areainfo VALUES ('440281', '乐昌市', '440200'); 25INSERT INTO booktest_areainfo VALUES ('440282', '南雄市', '440200'); 26INSERT INTO booktest_areainfo VALUES ('440300', '深圳市', '440000'); 27INSERT INTO booktest_areainfo VALUES ('440303', '罗湖区', '440300'); 28INSERT INTO booktest_areainfo VALUES ('440304', '福田区', '440300'); 29INSERT INTO booktest_areainfo VALUES ('440305', '南山区', '440300'); 30INSERT INTO booktest_areainfo VALUES ('440306', '宝安区', '440300'); 31INSERT INTO booktest_areainfo VALUES ('440307', '龙岗区', '440300'); 32INSERT INTO booktest_areainfo VALUES ('440308', '盐田区', '440300'); 33INSERT INTO booktest_areainfo VALUES ('440400', '珠海市', '440000'); 34INSERT INTO booktest_areainfo VALUES ('440402', '香洲区', '440400'); 35INSERT INTO booktest_areainfo VALUES ('440403', '斗门区', '440400'); 36INSERT INTO booktest_areainfo VALUES ('440404', '金湾区', '440400'); 37INSERT INTO booktest_areainfo VALUES ('440500', '汕头市', '440000'); 38INSERT INTO booktest_areainfo VALUES ('440507', '龙湖区', '440500'); 39INSERT INTO booktest_areainfo VALUES ('440511', '金平区', '440500'); 40INSERT INTO booktest_areainfo VALUES ('440512', '濠江区', '440500'); 41INSERT INTO booktest_areainfo VALUES ('440513', '潮阳区', '440500'); 42INSERT INTO booktest_areainfo VALUES ('440514', '潮南区', '440500'); 43INSERT INTO booktest_areainfo VALUES ('440515', '澄海区', '440500'); 44INSERT INTO booktest_areainfo VALUES ('440523', '南澳县', '440500'); 45INSERT INTO booktest_areainfo VALUES ('440600', '佛山市', '440000'); 46INSERT INTO booktest_areainfo VALUES ('440604', '禅城区', '440600'); 47INSERT INTO booktest_areainfo VALUES ('440605', '南海区', '440600'); 48INSERT INTO booktest_areainfo VALUES ('440606', '顺德区', '440600'); 49INSERT INTO booktest_areainfo VALUES ('440607', '三水区', '440600'); 50INSERT INTO booktest_areainfo VALUES ('440608', '高明区', '440600'); 51INSERT INTO booktest_areainfo VALUES ('440700', '江门市', '440000'); 52INSERT INTO booktest_areainfo VALUES ('440703', '蓬江区', '440700'); 53INSERT INTO booktest_areainfo VALUES ('440704', '江海区', '440700'); 54INSERT INTO booktest_areainfo VALUES ('440705', '新会区', '440700'); 55INSERT INTO booktest_areainfo VALUES ('440781', '台山市', '440700'); 56INSERT INTO booktest_areainfo VALUES ('440783', '开平市', '440700'); 57INSERT INTO booktest_areainfo VALUES ('440784', '鹤山市', '440700'); 58INSERT INTO booktest_areainfo VALUES ('440785', '恩平市', '440700'); 59INSERT INTO booktest_areainfo VALUES ('440800', '湛江市', '440000'); 60INSERT INTO booktest_areainfo VALUES ('440802', '赤坎区', '440800'); 61INSERT INTO booktest_areainfo VALUES ('440803', '霞山区', '440800'); 62INSERT INTO booktest_areainfo VALUES ('440804', '坡头区', '440800'); 63INSERT INTO booktest_areainfo VALUES ('440811', '麻章区', '440800'); 64INSERT INTO booktest_areainfo VALUES ('440823', '遂溪县', '440800'); 65INSERT INTO booktest_areainfo VALUES ('440825', '徐闻县', '440800'); 66INSERT INTO booktest_areainfo VALUES ('440881', '廉江市', '440800'); 67INSERT INTO booktest_areainfo VALUES ('440882', '雷州市', '440800'); 68INSERT INTO booktest_areainfo VALUES ('440883', '吴川市', '440800'); 69INSERT INTO booktest_areainfo VALUES ('440900', '茂名市', '440000'); 70INSERT INTO booktest_areainfo VALUES ('440902', '茂南区', '440900'); 71INSERT INTO booktest_areainfo VALUES ('440903', '茂港区', '440900'); 72INSERT INTO booktest_areainfo VALUES ('440923', '电白县', '440900'); 73INSERT INTO booktest_areainfo VALUES ('440981', '高州市', '440900'); 74INSERT INTO booktest_areainfo VALUES ('440982', '化州市', '440900'); 75INSERT INTO booktest_areainfo VALUES ('440983', '信宜市', '440900'); 76INSERT INTO booktest_areainfo VALUES ('441200', '肇庆市', '440000'); 77INSERT INTO booktest_areainfo VALUES ('441202', '端州区', '441200'); 78INSERT INTO booktest_areainfo VALUES ('441203', '鼎湖区', '441200'); 79INSERT INTO booktest_areainfo VALUES ('441223', '广宁县', '441200'); 80INSERT INTO booktest_areainfo VALUES ('441224', '怀集县', '441200'); 81INSERT INTO booktest_areainfo VALUES ('441225', '封开县', '441200'); 82INSERT INTO booktest_areainfo VALUES ('441226', '德庆县', '441200'); 83INSERT INTO booktest_areainfo VALUES ('441283', '高要市', '441200'); 84INSERT INTO booktest_areainfo VALUES ('441284', '四会市', '441200'); 85INSERT INTO booktest_areainfo VALUES ('441300', '惠州市', '440000'); 86INSERT INTO booktest_areainfo VALUES ('441302', '惠城区', '441300'); 87INSERT INTO booktest_areainfo VALUES ('441303', '惠阳区', '441300'); 88INSERT INTO booktest_areainfo VALUES ('441322', '博罗县', '441300'); 89INSERT INTO booktest_areainfo VALUES ('441323', '惠东县', '441300'); 90INSERT INTO booktest_areainfo VALUES ('441324', '龙门县', '441300'); 91INSERT INTO booktest_areainfo VALUES ('441400', '梅州市', '440000'); 92INSERT INTO booktest_areainfo VALUES ('441402', '梅江区', '441400'); 93INSERT INTO booktest_areainfo VALUES ('441421', '梅县', '441400'); 94INSERT INTO booktest_areainfo VALUES ('441422', '大埔县', '441400'); 95INSERT INTO booktest_areainfo VALUES ('441423', '丰顺县', '441400'); 96INSERT INTO booktest_areainfo VALUES ('441424', '五华县', '441400'); 97INSERT INTO booktest_areainfo VALUES ('441426', '平远县', '441400'); 98INSERT INTO booktest_areainfo VALUES ('441427', '蕉岭县', '441400'); 99INSERT INTO booktest_areainfo VALUES ('441481', '兴宁市', '441400'); 100INSERT INTO booktest_areainfo VALUES ('441500', '汕尾市', '440000'); 101INSERT INTO booktest_areainfo VALUES ('441502', '城区', '441500'); 102INSERT INTO booktest_areainfo VALUES ('441521', '海丰县', '441500'); 103INSERT INTO booktest_areainfo VALUES ('441523', '陆河县', '441500'); 104INSERT INTO booktest_areainfo VALUES ('441581', '陆丰市', '441500'); 105INSERT INTO booktest_areainfo VALUES ('441600', '河源市', '440000'); 106INSERT INTO booktest_areainfo VALUES ('441602', '源城区', '441600'); 107INSERT INTO booktest_areainfo VALUES ('441621', '紫金县', '441600'); 108INSERT INTO booktest_areainfo VALUES ('441622', '龙川县', '441600'); 109INSERT INTO booktest_areainfo VALUES ('441623', '连平县', '441600'); 110INSERT INTO booktest_areainfo VALUES ('441624', '和平县', '441600'); 111INSERT INTO booktest_areainfo VALUES ('441625', '东源县', '441600'); 112INSERT INTO booktest_areainfo VALUES ('441700', '阳江市', '440000'); 113INSERT INTO booktest_areainfo VALUES ('441702', '江城区', '441700'); 114INSERT INTO booktest_areainfo VALUES ('441721', '阳西县', '441700'); 115INSERT INTO booktest_areainfo VALUES ('441723', '阳东县', '441700'); 116INSERT INTO booktest_areainfo VALUES ('441781', '阳春市', '441700'); 117INSERT INTO booktest_areainfo VALUES ('441800', '清远市', '440000'); 118INSERT INTO booktest_areainfo VALUES ('441802', '清城区', '441800'); 119INSERT INTO booktest_areainfo VALUES ('441821', '佛冈县', '441800'); 120INSERT INTO booktest_areainfo VALUES ('441823', '阳山县', '441800'); 121INSERT INTO booktest_areainfo VALUES ('441825', '连山壮族瑶族自治县', '441800'); 122INSERT INTO booktest_areainfo VALUES ('441826', '连南瑶族自治县', '441800'); 123INSERT INTO booktest_areainfo VALUES ('441827', '清新县', '441800'); 124INSERT INTO booktest_areainfo VALUES ('441881', '英德市', '441800'); 125INSERT INTO booktest_areainfo VALUES ('441882', '连州市', '441800'); 126INSERT INTO booktest_areainfo VALUES ('441900', '东莞市', '440000'); 127INSERT INTO booktest_areainfo VALUES ('442000', '中山市', '440000'); 128INSERT INTO booktest_areainfo VALUES ('445100', '潮州市', '440000'); 129INSERT INTO booktest_areainfo VALUES ('445102', '湘桥区', '445100'); 130INSERT INTO booktest_areainfo VALUES ('445121', '潮安区', '445100'); 131INSERT INTO booktest_areainfo VALUES ('445122', '饶平县', '445100'); 132INSERT INTO booktest_areainfo VALUES ('445200', '揭阳市', '440000'); 133INSERT INTO booktest_areainfo VALUES ('445202', '榕城区', '445200'); 134INSERT INTO booktest_areainfo VALUES ('445221', '揭东县', '445200'); 135INSERT INTO booktest_areainfo VALUES ('445222', '揭西县', '445200'); 136INSERT INTO booktest_areainfo VALUES ('445224', '惠来县', '445200'); 137INSERT INTO booktest_areainfo VALUES ('445281', '普宁市', '445200'); 138INSERT INTO booktest_areainfo VALUES ('445300', '云浮市', '440000'); 139INSERT INTO booktest_areainfo VALUES ('445302', '云城区', '445300'); 140INSERT INTO booktest_areainfo VALUES ('445321', '新兴县', '445300'); 141INSERT INTO booktest_areainfo VALUES ('445322', '郁南县', '445300'); 142INSERT INTO booktest_areainfo VALUES ('445323', '云安县', '445300'); 143INSERT INTO booktest_areainfo VALUES ('445381', '罗定市', '445300'); 144INSERT INTO booktest_areainfo VALUES ('430000', '湖南省', NULL); 145INSERT INTO booktest_areainfo VALUES ('430100', '长沙市', '430000'); 146INSERT INTO booktest_areainfo VALUES ('430102', '芙蓉区', '430100'); 147INSERT INTO booktest_areainfo VALUES ('430103', '天心区', '430100'); 148INSERT INTO booktest_areainfo VALUES ('430104', '岳麓区', '430100'); 149INSERT INTO booktest_areainfo VALUES ('430105', '开福区', '430100'); 150INSERT INTO booktest_areainfo VALUES ('430111', '雨花区', '430100'); 151INSERT INTO booktest_areainfo VALUES ('430121', '长沙县', '430100'); 152INSERT INTO booktest_areainfo VALUES ('430122', '望城县', '430100'); 153INSERT INTO booktest_areainfo VALUES ('430124', '宁乡县', '430100'); 154INSERT INTO booktest_areainfo VALUES ('430181', '浏阳市', '430100'); 155INSERT INTO booktest_areainfo VALUES ('430200', '株洲市', '430000'); 156INSERT INTO booktest_areainfo VALUES ('430202', '荷塘区', '430200'); 157INSERT INTO booktest_areainfo VALUES ('430203', '芦淞区', '430200'); 158INSERT INTO booktest_areainfo VALUES ('430204', '石峰区', '430200'); 159INSERT INTO booktest_areainfo VALUES ('430211', '天元区', '430200'); 160INSERT INTO booktest_areainfo VALUES ('430221', '株洲县', '430200'); 161INSERT INTO booktest_areainfo VALUES ('430223', '攸县', '430200'); 162INSERT INTO booktest_areainfo VALUES ('430224', '茶陵县', '430200'); 163INSERT INTO booktest_areainfo VALUES ('430225', '炎陵县', '430200'); 164INSERT INTO booktest_areainfo VALUES ('430281', '醴陵市', '430200'); 165INSERT INTO booktest_areainfo VALUES ('430300', '湘潭市', '430000'); 166INSERT INTO booktest_areainfo VALUES ('430302', '雨湖区', '430300'); 167INSERT INTO booktest_areainfo VALUES ('430304', '岳塘区', '430300'); 168INSERT INTO booktest_areainfo VALUES ('430321', '湘潭县', '430300'); 169INSERT INTO booktest_areainfo VALUES ('430381', '湘乡市', '430300'); 170INSERT INTO booktest_areainfo VALUES ('430382', '韶山市', '430300'); 171INSERT INTO booktest_areainfo VALUES ('430400', '衡阳市', '430000'); 172INSERT INTO booktest_areainfo VALUES ('430405', '珠晖区', '430400'); 173INSERT INTO booktest_areainfo VALUES ('430406', '雁峰区', '430400'); 174INSERT INTO booktest_areainfo VALUES ('430407', '石鼓区', '430400'); 175INSERT INTO booktest_areainfo VALUES ('430408', '蒸湘区', '430400'); 176INSERT INTO booktest_areainfo VALUES ('430412', '南岳区', '430400'); 177INSERT INTO booktest_areainfo VALUES ('430421', '衡阳县', '430400'); 178INSERT INTO booktest_areainfo VALUES ('430422', '衡南县', '430400'); 179INSERT INTO booktest_areainfo VALUES ('430423', '衡山县', '430400'); 180INSERT INTO booktest_areainfo VALUES ('430424', '衡东县', '430400'); 181INSERT INTO booktest_areainfo VALUES ('430426', '祁东县', '430400'); 182INSERT INTO booktest_areainfo VALUES ('430481', '耒阳市', '430400'); 183INSERT INTO booktest_areainfo VALUES ('430482', '常宁市', '430400'); 184INSERT INTO booktest_areainfo VALUES ('430500', '邵阳市', '430000'); 185INSERT INTO booktest_areainfo VALUES ('430502', '双清区', '430500'); 186INSERT INTO booktest_areainfo VALUES ('430503', '大祥区', '430500'); 187INSERT INTO booktest_areainfo VALUES ('430511', '北塔区', '430500'); 188INSERT INTO booktest_areainfo VALUES ('430521', '邵东县', '430500'); 189INSERT INTO booktest_areainfo VALUES ('430522', '新邵县', '430500'); 190INSERT INTO booktest_areainfo VALUES ('430523', '邵阳县', '430500'); 191INSERT INTO booktest_areainfo VALUES ('430524', '隆回县', '430500'); 192INSERT INTO booktest_areainfo VALUES ('430525', '洞口县', '430500'); 193INSERT INTO booktest_areainfo VALUES ('430527', '绥宁县', '430500'); 194INSERT INTO booktest_areainfo VALUES ('430528', '新宁县', '430500'); 195INSERT INTO booktest_areainfo VALUES ('430529', '城步苗族自治县', '430500'); 196INSERT INTO booktest_areainfo VALUES ('430581', '武冈市', '430500'); 197INSERT INTO booktest_areainfo VALUES ('430600', '岳阳市', '430000'); 198INSERT INTO booktest_areainfo VALUES ('430602', '岳阳楼区', '430600'); 199INSERT INTO booktest_areainfo VALUES ('430603', '云溪区', '430600'); 200INSERT INTO booktest_areainfo VALUES ('430611', '君山区', '430600'); 201INSERT INTO booktest_areainfo VALUES ('430621', '岳阳县', '430600'); 202INSERT INTO booktest_areainfo VALUES ('430623', '华容县', '430600'); 203INSERT INTO booktest_areainfo VALUES ('430624', '湘阴县', '430600'); 204INSERT INTO booktest_areainfo VALUES ('430626', '平江县', '430600'); 205INSERT INTO booktest_areainfo VALUES ('430681', '汨罗市', '430600'); 206INSERT INTO booktest_areainfo VALUES ('430682', '临湘市', '430600'); 207INSERT INTO booktest_areainfo VALUES ('430700', '常德市', '430000'); 208INSERT INTO booktest_areainfo VALUES ('430702', '武陵区', '430700'); 209INSERT INTO booktest_areainfo VALUES ('430703', '鼎城区', '430700'); 210INSERT INTO booktest_areainfo VALUES ('430721', '安乡县', '430700'); 211INSERT INTO booktest_areainfo VALUES ('430722', '汉寿县', '430700'); 212INSERT INTO booktest_areainfo VALUES ('430723', '澧县', '430700'); 213INSERT INTO booktest_areainfo VALUES ('430724', '临澧县', '430700'); 214INSERT INTO booktest_areainfo VALUES ('430725', '桃源县', '430700'); 215INSERT INTO booktest_areainfo VALUES ('430726', '石门县', '430700'); 216INSERT INTO booktest_areainfo VALUES ('430781', '津市市', '430700'); 217INSERT INTO booktest_areainfo VALUES ('430800', '张家界市', '430000'); 218INSERT INTO booktest_areainfo VALUES ('430802', '永定区', '430800'); 219INSERT INTO booktest_areainfo VALUES ('430811', '武陵源区', '430800'); 220INSERT INTO booktest_areainfo VALUES ('430821', '慈利县', '430800'); 221INSERT INTO booktest_areainfo VALUES ('430822', '桑植县', '430800'); 222INSERT INTO booktest_areainfo VALUES ('430900', '益阳市', '430000'); 223INSERT INTO booktest_areainfo VALUES ('430902', '资阳区', '430900'); 224INSERT INTO booktest_areainfo VALUES ('430903', '赫山区', '430900'); 225INSERT INTO booktest_areainfo VALUES ('430921', '南县', '430900'); 226INSERT INTO booktest_areainfo VALUES ('430922', '桃江县', '430900'); 227INSERT INTO booktest_areainfo VALUES ('430923', '安化县', '430900'); 228INSERT INTO booktest_areainfo VALUES ('430981', '沅江市', '430900'); 229INSERT INTO booktest_areainfo VALUES ('431000', '郴州市', '430000'); 230INSERT INTO booktest_areainfo VALUES ('431002', '北湖区', '431000'); 231INSERT INTO booktest_areainfo VALUES ('431003', '苏仙区', '431000'); 232INSERT INTO booktest_areainfo VALUES ('431021', '桂阳县', '431000'); 233INSERT INTO booktest_areainfo VALUES ('431022', '宜章县', '431000'); 234INSERT INTO booktest_areainfo VALUES ('431023', '永兴县', '431000'); 235INSERT INTO booktest_areainfo VALUES ('431024', '嘉禾县', '431000'); 236INSERT INTO booktest_areainfo VALUES ('431025', '临武县', '431000'); 237INSERT INTO booktest_areainfo VALUES ('431026', '汝城县', '431000'); 238INSERT INTO booktest_areainfo VALUES ('431027', '桂东县', '431000'); 239INSERT INTO booktest_areainfo VALUES ('431028', '安仁县', '431000'); 240INSERT INTO booktest_areainfo VALUES ('431081', '资兴市', '431000'); 241INSERT INTO booktest_areainfo VALUES ('431100', '永州市', '430000'); 242INSERT INTO booktest_areainfo VALUES ('431102', '零陵区', '431100'); 243INSERT INTO booktest_areainfo VALUES ('431103', '冷水滩区', '431100'); 244INSERT INTO booktest_areainfo VALUES ('431121', '祁阳县', '431100'); 245INSERT INTO booktest_areainfo VALUES ('431122', '东安县', '431100'); 246INSERT INTO booktest_areainfo VALUES ('431123', '双牌县', '431100'); 247INSERT INTO booktest_areainfo VALUES ('431124', '道县', '431100'); 248INSERT INTO booktest_areainfo VALUES ('431125', '江永县', '431100'); 249INSERT INTO booktest_areainfo VALUES ('431126', '宁远县', '431100'); 250INSERT INTO booktest_areainfo VALUES ('431127', '蓝山县', '431100'); 251INSERT INTO booktest_areainfo VALUES ('431128', '新田县', '431100'); 252INSERT INTO booktest_areainfo VALUES ('431129', '江华瑶族自治县', '431100'); 253INSERT INTO booktest_areainfo VALUES ('431200', '怀化市', '430000'); 254INSERT INTO booktest_areainfo VALUES ('431202', '鹤城区', '431200'); 255INSERT INTO booktest_areainfo VALUES ('431221', '中方县', '431200'); 256INSERT INTO booktest_areainfo VALUES ('431222', '沅陵县', '431200'); 257INSERT INTO booktest_areainfo VALUES ('431223', '辰溪县', '431200'); 258INSERT INTO booktest_areainfo VALUES ('431224', '溆浦县', '431200'); 259INSERT INTO booktest_areainfo VALUES ('431225', '会同县', '431200'); 260INSERT INTO booktest_areainfo VALUES ('431226', '麻阳苗族自治县', '431200'); 261INSERT INTO booktest_areainfo VALUES ('431227', '新晃侗族自治县', '431200'); 262INSERT INTO booktest_areainfo VALUES ('431228', '芷江侗族自治县', '431200'); 263INSERT INTO booktest_areainfo VALUES ('431229', '靖州苗族侗族自治县', '431200'); 264INSERT INTO booktest_areainfo VALUES ('431230', '通道侗族自治县', '431200'); 265INSERT INTO booktest_areainfo VALUES ('431281', '洪江市', '431200'); 266INSERT INTO booktest_areainfo VALUES ('431300', '娄底市', '430000'); 267INSERT INTO booktest_areainfo VALUES ('431302', '娄星区', '431300'); 268INSERT INTO booktest_areainfo VALUES ('431321', '双峰县', '431300'); 269INSERT INTO booktest_areainfo VALUES ('431322', '新化县', '431300'); 270INSERT INTO booktest_areainfo VALUES ('431381', '冷水江市', '431300'); 271INSERT INTO booktest_areainfo VALUES ('431382', '涟源市', '431300'); 272INSERT INTO booktest_areainfo VALUES ('433100', '湘西土家族苗族自治州', '430000'); 273INSERT INTO booktest_areainfo VALUES ('433101', '吉首市', '433100'); 274INSERT INTO booktest_areainfo VALUES ('433122', '泸溪县', '433100'); 275INSERT INTO booktest_areainfo VALUES ('433123', '凤凰县', '433100'); 276INSERT INTO booktest_areainfo VALUES ('433124', '花垣县', '433100'); 277INSERT INTO booktest_areainfo VALUES ('433125', '保靖县', '433100'); 278INSERT INTO booktest_areainfo VALUES ('433126', '古丈县', '433100'); 279INSERT INTO booktest_areainfo VALUES ('433127', '永顺县', '433100'); 280INSERT INTO booktest_areainfo VALUES ('433130', '龙山县', '433100');

areas.sql

source areas.sql

打开booktest/views.py文件,定义视图area。

1from booktest.models import AreaInfo 2... 3#查询广州市的信息 4def area(request): 5 area = AreaInfo.objects.get(pk=440100) 6 return render(request, 'booktest/area.html', {'area': area})

打开booktest/urls.py文件,新建一条url。

1urlpatterns = [ 2 ... 3 url(r'^area/$', views.area), 4]

在templates/booktest目录下,新建area.html文件。

1<html> 2<head> 3 <title>地区</title> 4</head> 5<body> 6当前地区:{{area.atitle}} 7<hr/> 8上级地区:{{area.aParent.atitle}} 9<hr/> 10下级地区: 11<ul> 12 {%for a in area.areainfo_set.all%} 13 <li>{{a.atitle}}</li> 14 {%endfor%} 15</ul> 16</body> 17</html>

运行服务器。

 python manage.py runserver

在浏览器中输出效果如下图。

2. 模型类的属性

属性objects:管理器,是models.Manager类型的对象,用于与数据库进行交互。

当没有为模型类定义管理器时,Django会为每一个模型类生成一个名为objects的管理器,自定义管理器后,Django不再生成默认管理器objects。

为模型类BookInfo定义管理器books语法如下:

1class BookInfo(models.Model): 2 ... 3 books = models.Manager()

2.1 管理器Manager

管理器是Django的模型进行数据库操作的接口,Django应用的每个模型类都拥有至少一个管理器。Django支持自定义管理器类,继承自models.Manager。

自定义管理器类主要用于两种情况:

  • 1.修改原始查询集,重写all()方法
  • 2.向管理器类中添加额外的方法,如向数据库中插入数据。

1.修改原始查询集,重写all()方法。

a)打开booktest/models.py文件,定义类BookInfoManager

1#图书管理器 2class BookInfoManager(models.Manager): 3 def all(self): 4 #默认查询未删除的图书信息 5 #调用父类的成员语法为:super().方法名 6 return super().all().filter(isDelete=False)

b)在模型类BookInfo中定义管理器

1class BookInfo(models.Model): 2 ... 3 books = BookInfoManager()

2.在管理器类中定义创建对象的方法

对模型类对应的数据表进行操作时,推荐将这些操作数据表的方法封装起来,放到模型管理器类中。

a)打开booktest/models.py文件,定义方法create。

1class BookInfoManager(models.Manager): 2 ... 3 #创建模型类,接收参数为属性赋值 4 def create_book(self, title, pub_date): 5 #创建模型类对象self.model可以获得模型类 6 book = self.model() 7 book.btitle = title 8 book.bpub_date = pub_date 9 book.bread=0 10 book.bcommet=0 11 book.isDelete = False 12 # 将数据插入进数据表 13 book.save() 14 return book

b)为模型类BookInfo定义管理器books语法如下:

1class BookInfo(models.Model): 2 ... 3 books = BookInfoManager()

c)调用语法如下:

调用:book=BookInfo.books.create_book("abc",date(1980,1,1))

2.2 元选项

在模型类中定义类Meta,用于设置元信息,如使用db_table自定义表的名字。

数据表的默认名称为:

1<app_name>_<model_name> 2例: 3booktest_bookinfo

例:指定BookInfo模型类生成的数据表名为bookinfo。

在BookInfo模型类中添加如下内容,代码如下:

1#定义图书模型类BookInfo 2class BookInfo(models.Model): 3 ... 4 5 #定义元选项 6 class Meta: 7 db_table='bookinfo' #指定BookInfo生成的数据表名为bookinfo
点赞
收藏

评论区

加载中...

相关推荐

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Django之ORM(多对多)

一、ManyToManyField1、classRelatedManager"关联管理器"是在一对多或者多对多的关联上下文中使用的管理器。它存在于下面两种情况:1.外键关系的反向查询2.多对多关联关系简单来说就是当 点后面的对象 可能存在多个的时

Django中模型层中ORM的多表操作

ORM的多表创建(一对一.一对多,多对多):1模型创建  实例:我们来假定下面这些概念,字段和关系作者模型:一个作者有姓名和年龄。作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息。作者详情模型和作者模型之间是一对一的关系(onetoone)出版商模型:出版

Hibernate利用关联关系操纵对象

Hibernate利用关联关系操纵对象数据对象之间关联关系有一对一、一对多及多对多关联关系。在数据库操作中,数据对象之间的关联关系使用JDBC处理很困难。本节讲解如何在Hibernate中处理这些对象之间的关联关系。本节使用到4个类,它们分别是Student(学生)、Card(学生证)、Group(班级)和Cou

Django中Admin中的一些参数配置

设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable