首页 > 其他 > 详细

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

时间:2020-01-20 21:49:51      阅读:73      评论:0      收藏:0      [点我收藏+]

1. 关联

1.1 模型类关系

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

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

1.1.1 一对多关系

#定义图书模型类BookInfo
class BookInfo(models.Model):
    btitle = models.CharField(max_length=20)#图书名称
    bpub_date = models.DateField()#发布日期
    bread = models.IntegerField(default=0)#阅读量
    bcomment = models.IntegerField(default=0)#评论量
    isDelete = models.BooleanField(default=False)#逻辑删除

#定义角色模型类RoleInfo
class RoleInfo(models.Model):
    rname = models.CharField(max_length=20)#角色姓名
    rgender = models.BooleanField(default=True)#角色性别
    isDelete = models.BooleanField(default=False)#逻辑删除
    rcomment = models.CharField(max_len角色与图书表的关系为一对多,所以属性定义在角色模型类中

1.1.2 多对多关系

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

class TypeInfo(models.Model):
  tname = models.CharField(max_length=20) #新闻类别

class NewsInfo(models.Model):
  ntitle = models.CharField(max_length=60) #新闻标题
  ncontent = models.TextField() #新闻内容
  npub_date = models.DateTimeField(auto_now_add=True) #新闻发布时间
  ntype = models.ManyToManyField(TypeInfo) #通过ManyToManyField建立TypeInfo类和NewsInfo类之间多对多的关系

1.2 关联查询

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

1.2.1 通过对象执行关联查询

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

#一对应的模型类对象.多对应的模型类名小写_set

b = BookInfo.objects.get(id=1)
b.heroinfo_set.all()

由多到一的访问语法:

#多对应的模型类对象.多对应的模型类中的关系类属性名

r = RoleInfo.objects.get(id=1)
r.rbook

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

#多对应的模型类对象.关联类属性_id

r = RoleInfo.objects.get(id=1)
r.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允许为空,因为一级数据是没有父级的。

#定义地区模型类,存储省、市、区县信息
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命令行,导入数据。

技术分享图片
INSERT INTO booktest_areainfo VALUES (440000, 广东省, NULL);
INSERT INTO booktest_areainfo VALUES (440100, 广州市, 440000);
INSERT INTO booktest_areainfo VALUES (440103, 荔湾区, 440100);
INSERT INTO booktest_areainfo VALUES (440104, 越秀区, 440100);
INSERT INTO booktest_areainfo VALUES (440105, 海珠区, 440100);
INSERT INTO booktest_areainfo VALUES (440106, 天河区, 440100);
INSERT INTO booktest_areainfo VALUES (440111, 白云区, 440100);
INSERT INTO booktest_areainfo VALUES (440112, 黄埔区, 440100);
INSERT INTO booktest_areainfo VALUES (440113, 番禺区, 440100);
INSERT INTO booktest_areainfo VALUES (440114, 花都区, 440100);
INSERT INTO booktest_areainfo VALUES (440115, 南沙区, 440100);
INSERT INTO booktest_areainfo VALUES (440116, 萝岗区, 440100);
INSERT INTO booktest_areainfo VALUES (440183, 增城市, 440100);
INSERT INTO booktest_areainfo VALUES (440184, 从化市, 440100);
INSERT INTO booktest_areainfo VALUES (440200, 韶关市, 440000);
INSERT INTO booktest_areainfo VALUES (440203, 武江区, 440200);
INSERT INTO booktest_areainfo VALUES (440204, 浈江区, 440200);
INSERT INTO booktest_areainfo VALUES (440205, 曲江区, 440200);
INSERT INTO booktest_areainfo VALUES (440222, 始兴县, 440200);
INSERT INTO booktest_areainfo VALUES (440224, 仁化县, 440200);
INSERT INTO booktest_areainfo VALUES (440229, 翁源县, 440200);
INSERT INTO booktest_areainfo VALUES (440232, 乳源瑶族自治县, 440200);
INSERT INTO booktest_areainfo VALUES (440233, 新丰县, 440200);
INSERT INTO booktest_areainfo VALUES (440281, 乐昌市, 440200);
INSERT INTO booktest_areainfo VALUES (440282, 南雄市, 440200);
INSERT INTO booktest_areainfo VALUES (440300, 深圳市, 440000);
INSERT INTO booktest_areainfo VALUES (440303, 罗湖区, 440300);
INSERT INTO booktest_areainfo VALUES (440304, 福田区, 440300);
INSERT INTO booktest_areainfo VALUES (440305, 南山区, 440300);
INSERT INTO booktest_areainfo VALUES (440306, 宝安区, 440300);
INSERT INTO booktest_areainfo VALUES (440307, 龙岗区, 440300);
INSERT INTO booktest_areainfo VALUES (440308, 盐田区, 440300);
INSERT INTO booktest_areainfo VALUES (440400, 珠海市, 440000);
INSERT INTO booktest_areainfo VALUES (440402, 香洲区, 440400);
INSERT INTO booktest_areainfo VALUES (440403, 斗门区, 440400);
INSERT INTO booktest_areainfo VALUES (440404, 金湾区, 440400);
INSERT INTO booktest_areainfo VALUES (440500, 汕头市, 440000);
INSERT INTO booktest_areainfo VALUES (440507, 龙湖区, 440500);
INSERT INTO booktest_areainfo VALUES (440511, 金平区, 440500);
INSERT INTO booktest_areainfo VALUES (440512, 濠江区, 440500);
INSERT INTO booktest_areainfo VALUES (440513, 潮阳区, 440500);
INSERT INTO booktest_areainfo VALUES (440514, 潮南区, 440500);
INSERT INTO booktest_areainfo VALUES (440515, 澄海区, 440500);
INSERT INTO booktest_areainfo VALUES (440523, 南澳县, 440500);
INSERT INTO booktest_areainfo VALUES (440600, 佛山市, 440000);
INSERT INTO booktest_areainfo VALUES (440604, 禅城区, 440600);
INSERT INTO booktest_areainfo VALUES (440605, 南海区, 440600);
INSERT INTO booktest_areainfo VALUES (440606, 顺德区, 440600);
INSERT INTO booktest_areainfo VALUES (440607, 三水区, 440600);
INSERT INTO booktest_areainfo VALUES (440608, 高明区, 440600);
INSERT INTO booktest_areainfo VALUES (440700, 江门市, 440000);
INSERT INTO booktest_areainfo VALUES (440703, 蓬江区, 440700);
INSERT INTO booktest_areainfo VALUES (440704, 江海区, 440700);
INSERT INTO booktest_areainfo VALUES (440705, 新会区, 440700);
INSERT INTO booktest_areainfo VALUES (440781, 台山市, 440700);
INSERT INTO booktest_areainfo VALUES (440783, 开平市, 440700);
INSERT INTO booktest_areainfo VALUES (440784, 鹤山市, 440700);
INSERT INTO booktest_areainfo VALUES (440785, 恩平市, 440700);
INSERT INTO booktest_areainfo VALUES (440800, 湛江市, 440000);
INSERT INTO booktest_areainfo VALUES (440802, 赤坎区, 440800);
INSERT INTO booktest_areainfo VALUES (440803, 霞山区, 440800);
INSERT INTO booktest_areainfo VALUES (440804, 坡头区, 440800);
INSERT INTO booktest_areainfo VALUES (440811, 麻章区, 440800);
INSERT INTO booktest_areainfo VALUES (440823, 遂溪县, 440800);
INSERT INTO booktest_areainfo VALUES (440825, 徐闻县, 440800);
INSERT INTO booktest_areainfo VALUES (440881, 廉江市, 440800);
INSERT INTO booktest_areainfo VALUES (440882, 雷州市, 440800);
INSERT INTO booktest_areainfo VALUES (440883, 吴川市, 440800);
INSERT INTO booktest_areainfo VALUES (440900, 茂名市, 440000);
INSERT INTO booktest_areainfo VALUES (440902, 茂南区, 440900);
INSERT INTO booktest_areainfo VALUES (440903, 茂港区, 440900);
INSERT INTO booktest_areainfo VALUES (440923, 电白县, 440900);
INSERT INTO booktest_areainfo VALUES (440981, 高州市, 440900);
INSERT INTO booktest_areainfo VALUES (440982, 化州市, 440900);
INSERT INTO booktest_areainfo VALUES (440983, 信宜市, 440900);
INSERT INTO booktest_areainfo VALUES (441200, 肇庆市, 440000);
INSERT INTO booktest_areainfo VALUES (441202, 端州区, 441200);
INSERT INTO booktest_areainfo VALUES (441203, 鼎湖区, 441200);
INSERT INTO booktest_areainfo VALUES (441223, 广宁县, 441200);
INSERT INTO booktest_areainfo VALUES (441224, 怀集县, 441200);
INSERT INTO booktest_areainfo VALUES (441225, 封开县, 441200);
INSERT INTO booktest_areainfo VALUES (441226, 德庆县, 441200);
INSERT INTO booktest_areainfo VALUES (441283, 高要市, 441200);
INSERT INTO booktest_areainfo VALUES (441284, 四会市, 441200);
INSERT INTO booktest_areainfo VALUES (441300, 惠州市, 440000);
INSERT INTO booktest_areainfo VALUES (441302, 惠城区, 441300);
INSERT INTO booktest_areainfo VALUES (441303, 惠阳区, 441300);
INSERT INTO booktest_areainfo VALUES (441322, 博罗县, 441300);
INSERT INTO booktest_areainfo VALUES (441323, 惠东县, 441300);
INSERT INTO booktest_areainfo VALUES (441324, 龙门县, 441300);
INSERT INTO booktest_areainfo VALUES (441400, 梅州市, 440000);
INSERT INTO booktest_areainfo VALUES (441402, 梅江区, 441400);
INSERT INTO booktest_areainfo VALUES (441421, 梅县, 441400);
INSERT INTO booktest_areainfo VALUES (441422, 大埔县, 441400);
INSERT INTO booktest_areainfo VALUES (441423, 丰顺县, 441400);
INSERT INTO booktest_areainfo VALUES (441424, 五华县, 441400);
INSERT INTO booktest_areainfo VALUES (441426, 平远县, 441400);
INSERT INTO booktest_areainfo VALUES (441427, 蕉岭县, 441400);
INSERT INTO booktest_areainfo VALUES (441481, 兴宁市, 441400);
INSERT INTO booktest_areainfo VALUES (441500, 汕尾市, 440000);
INSERT INTO booktest_areainfo VALUES (441502, 城区, 441500);
INSERT INTO booktest_areainfo VALUES (441521, 海丰县, 441500);
INSERT INTO booktest_areainfo VALUES (441523, 陆河县, 441500);
INSERT INTO booktest_areainfo VALUES (441581, 陆丰市, 441500);
INSERT INTO booktest_areainfo VALUES (441600, 河源市, 440000);
INSERT INTO booktest_areainfo VALUES (441602, 源城区, 441600);
INSERT INTO booktest_areainfo VALUES (441621, 紫金县, 441600);
INSERT INTO booktest_areainfo VALUES (441622, 龙川县, 441600);
INSERT INTO booktest_areainfo VALUES (441623, 连平县, 441600);
INSERT INTO booktest_areainfo VALUES (441624, 和平县, 441600);
INSERT INTO booktest_areainfo VALUES (441625, 东源县, 441600);
INSERT INTO booktest_areainfo VALUES (441700, 阳江市, 440000);
INSERT INTO booktest_areainfo VALUES (441702, 江城区, 441700);
INSERT INTO booktest_areainfo VALUES (441721, 阳西县, 441700);
INSERT INTO booktest_areainfo VALUES (441723, 阳东县, 441700);
INSERT INTO booktest_areainfo VALUES (441781, 阳春市, 441700);
INSERT INTO booktest_areainfo VALUES (441800, 清远市, 440000);
INSERT INTO booktest_areainfo VALUES (441802, 清城区, 441800);
INSERT INTO booktest_areainfo VALUES (441821, 佛冈县, 441800);
INSERT INTO booktest_areainfo VALUES (441823, 阳山县, 441800);
INSERT INTO booktest_areainfo VALUES (441825, 连山壮族瑶族自治县, 441800);
INSERT INTO booktest_areainfo VALUES (441826, 连南瑶族自治县, 441800);
INSERT INTO booktest_areainfo VALUES (441827, 清新县, 441800);
INSERT INTO booktest_areainfo VALUES (441881, 英德市, 441800);
INSERT INTO booktest_areainfo VALUES (441882, 连州市, 441800);
INSERT INTO booktest_areainfo VALUES (441900, 东莞市, 440000);
INSERT INTO booktest_areainfo VALUES (442000, 中山市, 440000);
INSERT INTO booktest_areainfo VALUES (445100, 潮州市, 440000);
INSERT INTO booktest_areainfo VALUES (445102, 湘桥区, 445100);
INSERT INTO booktest_areainfo VALUES (445121, 潮安区, 445100);
INSERT INTO booktest_areainfo VALUES (445122, 饶平县, 445100);
INSERT INTO booktest_areainfo VALUES (445200, 揭阳市, 440000);
INSERT INTO booktest_areainfo VALUES (445202, 榕城区, 445200);
INSERT INTO booktest_areainfo VALUES (445221, 揭东县, 445200);
INSERT INTO booktest_areainfo VALUES (445222, 揭西县, 445200);
INSERT INTO booktest_areainfo VALUES (445224, 惠来县, 445200);
INSERT INTO booktest_areainfo VALUES (445281, 普宁市, 445200);
INSERT INTO booktest_areainfo VALUES (445300, 云浮市, 440000);
INSERT INTO booktest_areainfo VALUES (445302, 云城区, 445300);
INSERT INTO booktest_areainfo VALUES (445321, 新兴县, 445300);
INSERT INTO booktest_areainfo VALUES (445322, 郁南县, 445300);
INSERT INTO booktest_areainfo VALUES (445323, 云安县, 445300);
INSERT INTO booktest_areainfo VALUES (445381, 罗定市, 445300);
INSERT INTO booktest_areainfo VALUES (430000, 湖南省, NULL);
INSERT INTO booktest_areainfo VALUES (430100, 长沙市, 430000);
INSERT INTO booktest_areainfo VALUES (430102, 芙蓉区, 430100);
INSERT INTO booktest_areainfo VALUES (430103, 天心区, 430100);
INSERT INTO booktest_areainfo VALUES (430104, 岳麓区, 430100);
INSERT INTO booktest_areainfo VALUES (430105, 开福区, 430100);
INSERT INTO booktest_areainfo VALUES (430111, 雨花区, 430100);
INSERT INTO booktest_areainfo VALUES (430121, 长沙县, 430100);
INSERT INTO booktest_areainfo VALUES (430122, 望城县, 430100);
INSERT INTO booktest_areainfo VALUES (430124, 宁乡县, 430100);
INSERT INTO booktest_areainfo VALUES (430181, 浏阳市, 430100);
INSERT INTO booktest_areainfo VALUES (430200, 株洲市, 430000);
INSERT INTO booktest_areainfo VALUES (430202, 荷塘区, 430200);
INSERT INTO booktest_areainfo VALUES (430203, 芦淞区, 430200);
INSERT INTO booktest_areainfo VALUES (430204, 石峰区, 430200);
INSERT INTO booktest_areainfo VALUES (430211, 天元区, 430200);
INSERT INTO booktest_areainfo VALUES (430221, 株洲县, 430200);
INSERT INTO booktest_areainfo VALUES (430223, 攸县, 430200);
INSERT INTO booktest_areainfo VALUES (430224, 茶陵县, 430200);
INSERT INTO booktest_areainfo VALUES (430225, 炎陵县, 430200);
INSERT INTO booktest_areainfo VALUES (430281, 醴陵市, 430200);
INSERT INTO booktest_areainfo VALUES (430300, 湘潭市, 430000);
INSERT INTO booktest_areainfo VALUES (430302, 雨湖区, 430300);
INSERT INTO booktest_areainfo VALUES (430304, 岳塘区, 430300);
INSERT INTO booktest_areainfo VALUES (430321, 湘潭县, 430300);
INSERT INTO booktest_areainfo VALUES (430381, 湘乡市, 430300);
INSERT INTO booktest_areainfo VALUES (430382, 韶山市, 430300);
INSERT INTO booktest_areainfo VALUES (430400, 衡阳市, 430000);
INSERT INTO booktest_areainfo VALUES (430405, 珠晖区, 430400);
INSERT INTO booktest_areainfo VALUES (430406, 雁峰区, 430400);
INSERT INTO booktest_areainfo VALUES (430407, 石鼓区, 430400);
INSERT INTO booktest_areainfo VALUES (430408, 蒸湘区, 430400);
INSERT INTO booktest_areainfo VALUES (430412, 南岳区, 430400);
INSERT INTO booktest_areainfo VALUES (430421, 衡阳县, 430400);
INSERT INTO booktest_areainfo VALUES (430422, 衡南县, 430400);
INSERT INTO booktest_areainfo VALUES (430423, 衡山县, 430400);
INSERT INTO booktest_areainfo VALUES (430424, 衡东县, 430400);
INSERT INTO booktest_areainfo VALUES (430426, 祁东县, 430400);
INSERT INTO booktest_areainfo VALUES (430481, 耒阳市, 430400);
INSERT INTO booktest_areainfo VALUES (430482, 常宁市, 430400);
INSERT INTO booktest_areainfo VALUES (430500, 邵阳市, 430000);
INSERT INTO booktest_areainfo VALUES (430502, 双清区, 430500);
INSERT INTO booktest_areainfo VALUES (430503, 大祥区, 430500);
INSERT INTO booktest_areainfo VALUES (430511, 北塔区, 430500);
INSERT INTO booktest_areainfo VALUES (430521, 邵东县, 430500);
INSERT INTO booktest_areainfo VALUES (430522, 新邵县, 430500);
INSERT INTO booktest_areainfo VALUES (430523, 邵阳县, 430500);
INSERT INTO booktest_areainfo VALUES (430524, 隆回县, 430500);
INSERT INTO booktest_areainfo VALUES (430525, 洞口县, 430500);
INSERT INTO booktest_areainfo VALUES (430527, 绥宁县, 430500);
INSERT INTO booktest_areainfo VALUES (430528, 新宁县, 430500);
INSERT INTO booktest_areainfo VALUES (430529, 城步苗族自治县, 430500);
INSERT INTO booktest_areainfo VALUES (430581, 武冈市, 430500);
INSERT INTO booktest_areainfo VALUES (430600, 岳阳市, 430000);
INSERT INTO booktest_areainfo VALUES (430602, 岳阳楼区, 430600);
INSERT INTO booktest_areainfo VALUES (430603, 云溪区, 430600);
INSERT INTO booktest_areainfo VALUES (430611, 君山区, 430600);
INSERT INTO booktest_areainfo VALUES (430621, 岳阳县, 430600);
INSERT INTO booktest_areainfo VALUES (430623, 华容县, 430600);
INSERT INTO booktest_areainfo VALUES (430624, 湘阴县, 430600);
INSERT INTO booktest_areainfo VALUES (430626, 平江县, 430600);
INSERT INTO booktest_areainfo VALUES (430681, 汨罗市, 430600);
INSERT INTO booktest_areainfo VALUES (430682, 临湘市, 430600);
INSERT INTO booktest_areainfo VALUES (430700, 常德市, 430000);
INSERT INTO booktest_areainfo VALUES (430702, 武陵区, 430700);
INSERT INTO booktest_areainfo VALUES (430703, 鼎城区, 430700);
INSERT INTO booktest_areainfo VALUES (430721, 安乡县, 430700);
INSERT INTO booktest_areainfo VALUES (430722, 汉寿县, 430700);
INSERT INTO booktest_areainfo VALUES (430723, 澧县, 430700);
INSERT INTO booktest_areainfo VALUES (430724, 临澧县, 430700);
INSERT INTO booktest_areainfo VALUES (430725, 桃源县, 430700);
INSERT INTO booktest_areainfo VALUES (430726, 石门县, 430700);
INSERT INTO booktest_areainfo VALUES (430781, 津市市, 430700);
INSERT INTO booktest_areainfo VALUES (430800, 张家界市, 430000);
INSERT INTO booktest_areainfo VALUES (430802, 永定区, 430800);
INSERT INTO booktest_areainfo VALUES (430811, 武陵源区, 430800);
INSERT INTO booktest_areainfo VALUES (430821, 慈利县, 430800);
INSERT INTO booktest_areainfo VALUES (430822, 桑植县, 430800);
INSERT INTO booktest_areainfo VALUES (430900, 益阳市, 430000);
INSERT INTO booktest_areainfo VALUES (430902, 资阳区, 430900);
INSERT INTO booktest_areainfo VALUES (430903, 赫山区, 430900);
INSERT INTO booktest_areainfo VALUES (430921, 南县, 430900);
INSERT INTO booktest_areainfo VALUES (430922, 桃江县, 430900);
INSERT INTO booktest_areainfo VALUES (430923, 安化县, 430900);
INSERT INTO booktest_areainfo VALUES (430981, 沅江市, 430900);
INSERT INTO booktest_areainfo VALUES (431000, 郴州市, 430000);
INSERT INTO booktest_areainfo VALUES (431002, 北湖区, 431000);
INSERT INTO booktest_areainfo VALUES (431003, 苏仙区, 431000);
INSERT INTO booktest_areainfo VALUES (431021, 桂阳县, 431000);
INSERT INTO booktest_areainfo VALUES (431022, 宜章县, 431000);
INSERT INTO booktest_areainfo VALUES (431023, 永兴县, 431000);
INSERT INTO booktest_areainfo VALUES (431024, 嘉禾县, 431000);
INSERT INTO booktest_areainfo VALUES (431025, 临武县, 431000);
INSERT INTO booktest_areainfo VALUES (431026, 汝城县, 431000);
INSERT INTO booktest_areainfo VALUES (431027, 桂东县, 431000);
INSERT INTO booktest_areainfo VALUES (431028, 安仁县, 431000);
INSERT INTO booktest_areainfo VALUES (431081, 资兴市, 431000);
INSERT INTO booktest_areainfo VALUES (431100, 永州市, 430000);
INSERT INTO booktest_areainfo VALUES (431102, 零陵区, 431100);
INSERT INTO booktest_areainfo VALUES (431103, 冷水滩区, 431100);
INSERT INTO booktest_areainfo VALUES (431121, 祁阳县, 431100);
INSERT INTO booktest_areainfo VALUES (431122, 东安县, 431100);
INSERT INTO booktest_areainfo VALUES (431123, 双牌县, 431100);
INSERT INTO booktest_areainfo VALUES (431124, 道县, 431100);
INSERT INTO booktest_areainfo VALUES (431125, 江永县, 431100);
INSERT INTO booktest_areainfo VALUES (431126, 宁远县, 431100);
INSERT INTO booktest_areainfo VALUES (431127, 蓝山县, 431100);
INSERT INTO booktest_areainfo VALUES (431128, 新田县, 431100);
INSERT INTO booktest_areainfo VALUES (431129, 江华瑶族自治县, 431100);
INSERT INTO booktest_areainfo VALUES (431200, 怀化市, 430000);
INSERT INTO booktest_areainfo VALUES (431202, 鹤城区, 431200);
INSERT INTO booktest_areainfo VALUES (431221, 中方县, 431200);
INSERT INTO booktest_areainfo VALUES (431222, 沅陵县, 431200);
INSERT INTO booktest_areainfo VALUES (431223, 辰溪县, 431200);
INSERT INTO booktest_areainfo VALUES (431224, 溆浦县, 431200);
INSERT INTO booktest_areainfo VALUES (431225, 会同县, 431200);
INSERT INTO booktest_areainfo VALUES (431226, 麻阳苗族自治县, 431200);
INSERT INTO booktest_areainfo VALUES (431227, 新晃侗族自治县, 431200);
INSERT INTO booktest_areainfo VALUES (431228, 芷江侗族自治县, 431200);
INSERT INTO booktest_areainfo VALUES (431229, 靖州苗族侗族自治县, 431200);
INSERT INTO booktest_areainfo VALUES (431230, 通道侗族自治县, 431200);
INSERT INTO booktest_areainfo VALUES (431281, 洪江市, 431200);
INSERT INTO booktest_areainfo VALUES (431300, 娄底市, 430000);
INSERT INTO booktest_areainfo VALUES (431302, 娄星区, 431300);
INSERT INTO booktest_areainfo VALUES (431321, 双峰县, 431300);
INSERT INTO booktest_areainfo VALUES (431322, 新化县, 431300);
INSERT INTO booktest_areainfo VALUES (431381, 冷水江市, 431300);
INSERT INTO booktest_areainfo VALUES (431382, 涟源市, 431300);
INSERT INTO booktest_areainfo VALUES (433100, 湘西土家族苗族自治州, 430000);
INSERT INTO booktest_areainfo VALUES (433101, 吉首市, 433100);
INSERT INTO booktest_areainfo VALUES (433122, 泸溪县, 433100);
INSERT INTO booktest_areainfo VALUES (433123, 凤凰县, 433100);
INSERT INTO booktest_areainfo VALUES (433124, 花垣县, 433100);
INSERT INTO booktest_areainfo VALUES (433125, 保靖县, 433100);
INSERT INTO booktest_areainfo VALUES (433126, 古丈县, 433100);
INSERT INTO booktest_areainfo VALUES (433127, 永顺县, 433100);
INSERT INTO booktest_areainfo VALUES (433130, 龙山县, 433100);
areas.sql

source areas.sql

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

from booktest.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

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

技术分享图片

2. 模型类的属性

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

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

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

class BookInfo(models.Model):
    ...
    books = models.Manager()

2.1 管理器Manager

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

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

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

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

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

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

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

class BookInfo(models.Model):
    ...
    books = BookInfoManager()

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

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

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

class BookInfoManager(models.Manager):
    ...
    #创建模型类,接收参数为属性赋值
    def create_book(self, title, pub_date):
        #创建模型类对象self.model可以获得模型类
        book = self.model()
        book.btitle = title
        book.bpub_date = pub_date
        book.bread=0
        book.bcommet=0
        book.isDelete = False
        # 将数据插入进数据表
        book.save()
        return book

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

class BookInfo(models.Model):
    ...
    books = BookInfoManager()

c)调用语法如下:

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

2.2 元选项

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

数据表的默认名称为:

<app_name>_<model_name>
例:
booktest_bookinfo

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

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

#定义图书模型类BookInfo
class BookInfo(models.Model):
    ...

    #定义元选项
    class Meta:
      db_table=bookinfo #指定BookInfo生成的数据表名为bookinfo

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

原文:https://www.cnblogs.com/liuhui0308/p/12219029.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!