1. 关联

1.1 模型类关系

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

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

1.1.1 一对多关系

  1. #定义图书模型类BookInfo
  2. class 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
  10. class 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 多对多关系

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

  1. class TypeInfo(models.Model):
  2. tname = models.CharField(max_length=20) #新闻类别
  3.  
  4. class 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.  
  3. b = BookInfo.objects.get(id=1)
  4. b.heroinfo_set.all()

由多到一的访问语法:

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

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

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

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

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

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

  1. book.roleinfo_set.all()

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

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

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

  1. role.rbook

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

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

语法如下:

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

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

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

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

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

语法如下:

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

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

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

1.3 自关联

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

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

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

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

迁移。

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

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

  1. INSERT INTO booktest_areainfo VALUES ('', '广东省', NULL);
  2. INSERT INTO booktest_areainfo VALUES ('', '广州市', '');
  3. INSERT INTO booktest_areainfo VALUES ('', '荔湾区', '');
  4. INSERT INTO booktest_areainfo VALUES ('', '越秀区', '');
  5. INSERT INTO booktest_areainfo VALUES ('', '海珠区', '');
  6. INSERT INTO booktest_areainfo VALUES ('', '天河区', '');
  7. INSERT INTO booktest_areainfo VALUES ('', '白云区', '');
  8. INSERT INTO booktest_areainfo VALUES ('', '黄埔区', '');
  9. INSERT INTO booktest_areainfo VALUES ('', '番禺区', '');
  10. INSERT INTO booktest_areainfo VALUES ('', '花都区', '');
  11. INSERT INTO booktest_areainfo VALUES ('', '南沙区', '');
  12. INSERT INTO booktest_areainfo VALUES ('', '萝岗区', '');
  13. INSERT INTO booktest_areainfo VALUES ('', '增城市', '');
  14. INSERT INTO booktest_areainfo VALUES ('', '从化市', '');
  15. INSERT INTO booktest_areainfo VALUES ('', '韶关市', '');
  16. INSERT INTO booktest_areainfo VALUES ('', '武江区', '');
  17. INSERT INTO booktest_areainfo VALUES ('', '浈江区', '');
  18. INSERT INTO booktest_areainfo VALUES ('', '曲江区', '');
  19. INSERT INTO booktest_areainfo VALUES ('', '始兴县', '');
  20. INSERT INTO booktest_areainfo VALUES ('', '仁化县', '');
  21. INSERT INTO booktest_areainfo VALUES ('', '翁源县', '');
  22. INSERT INTO booktest_areainfo VALUES ('', '乳源瑶族自治县', '');
  23. INSERT INTO booktest_areainfo VALUES ('', '新丰县', '');
  24. INSERT INTO booktest_areainfo VALUES ('', '乐昌市', '');
  25. INSERT INTO booktest_areainfo VALUES ('', '南雄市', '');
  26. INSERT INTO booktest_areainfo VALUES ('', '深圳市', '');
  27. INSERT INTO booktest_areainfo VALUES ('', '罗湖区', '');
  28. INSERT INTO booktest_areainfo VALUES ('', '福田区', '');
  29. INSERT INTO booktest_areainfo VALUES ('', '南山区', '');
  30. INSERT INTO booktest_areainfo VALUES ('', '宝安区', '');
  31. INSERT INTO booktest_areainfo VALUES ('', '龙岗区', '');
  32. INSERT INTO booktest_areainfo VALUES ('', '盐田区', '');
  33. INSERT INTO booktest_areainfo VALUES ('', '珠海市', '');
  34. INSERT INTO booktest_areainfo VALUES ('', '香洲区', '');
  35. INSERT INTO booktest_areainfo VALUES ('', '斗门区', '');
  36. INSERT INTO booktest_areainfo VALUES ('', '金湾区', '');
  37. INSERT INTO booktest_areainfo VALUES ('', '汕头市', '');
  38. INSERT INTO booktest_areainfo VALUES ('', '龙湖区', '');
  39. INSERT INTO booktest_areainfo VALUES ('', '金平区', '');
  40. INSERT INTO booktest_areainfo VALUES ('', '濠江区', '');
  41. INSERT INTO booktest_areainfo VALUES ('', '潮阳区', '');
  42. INSERT INTO booktest_areainfo VALUES ('', '潮南区', '');
  43. INSERT INTO booktest_areainfo VALUES ('', '澄海区', '');
  44. INSERT INTO booktest_areainfo VALUES ('', '南澳县', '');
  45. INSERT INTO booktest_areainfo VALUES ('', '佛山市', '');
  46. INSERT INTO booktest_areainfo VALUES ('', '禅城区', '');
  47. INSERT INTO booktest_areainfo VALUES ('', '南海区', '');
  48. INSERT INTO booktest_areainfo VALUES ('', '顺德区', '');
  49. INSERT INTO booktest_areainfo VALUES ('', '三水区', '');
  50. INSERT INTO booktest_areainfo VALUES ('', '高明区', '');
  51. INSERT INTO booktest_areainfo VALUES ('', '江门市', '');
  52. INSERT INTO booktest_areainfo VALUES ('', '蓬江区', '');
  53. INSERT INTO booktest_areainfo VALUES ('', '江海区', '');
  54. INSERT INTO booktest_areainfo VALUES ('', '新会区', '');
  55. INSERT INTO booktest_areainfo VALUES ('', '台山市', '');
  56. INSERT INTO booktest_areainfo VALUES ('', '开平市', '');
  57. INSERT INTO booktest_areainfo VALUES ('', '鹤山市', '');
  58. INSERT INTO booktest_areainfo VALUES ('', '恩平市', '');
  59. INSERT INTO booktest_areainfo VALUES ('', '湛江市', '');
  60. INSERT INTO booktest_areainfo VALUES ('', '赤坎区', '');
  61. INSERT INTO booktest_areainfo VALUES ('', '霞山区', '');
  62. INSERT INTO booktest_areainfo VALUES ('', '坡头区', '');
  63. INSERT INTO booktest_areainfo VALUES ('', '麻章区', '');
  64. INSERT INTO booktest_areainfo VALUES ('', '遂溪县', '');
  65. INSERT INTO booktest_areainfo VALUES ('', '徐闻县', '');
  66. INSERT INTO booktest_areainfo VALUES ('', '廉江市', '');
  67. INSERT INTO booktest_areainfo VALUES ('', '雷州市', '');
  68. INSERT INTO booktest_areainfo VALUES ('', '吴川市', '');
  69. INSERT INTO booktest_areainfo VALUES ('', '茂名市', '');
  70. INSERT INTO booktest_areainfo VALUES ('', '茂南区', '');
  71. INSERT INTO booktest_areainfo VALUES ('', '茂港区', '');
  72. INSERT INTO booktest_areainfo VALUES ('', '电白县', '');
  73. INSERT INTO booktest_areainfo VALUES ('', '高州市', '');
  74. INSERT INTO booktest_areainfo VALUES ('', '化州市', '');
  75. INSERT INTO booktest_areainfo VALUES ('', '信宜市', '');
  76. INSERT INTO booktest_areainfo VALUES ('', '肇庆市', '');
  77. INSERT INTO booktest_areainfo VALUES ('', '端州区', '');
  78. INSERT INTO booktest_areainfo VALUES ('', '鼎湖区', '');
  79. INSERT INTO booktest_areainfo VALUES ('', '广宁县', '');
  80. INSERT INTO booktest_areainfo VALUES ('', '怀集县', '');
  81. INSERT INTO booktest_areainfo VALUES ('', '封开县', '');
  82. INSERT INTO booktest_areainfo VALUES ('', '德庆县', '');
  83. INSERT INTO booktest_areainfo VALUES ('', '高要市', '');
  84. INSERT INTO booktest_areainfo VALUES ('', '四会市', '');
  85. INSERT INTO booktest_areainfo VALUES ('', '惠州市', '');
  86. INSERT INTO booktest_areainfo VALUES ('', '惠城区', '');
  87. INSERT INTO booktest_areainfo VALUES ('', '惠阳区', '');
  88. INSERT INTO booktest_areainfo VALUES ('', '博罗县', '');
  89. INSERT INTO booktest_areainfo VALUES ('', '惠东县', '');
  90. INSERT INTO booktest_areainfo VALUES ('', '龙门县', '');
  91. INSERT INTO booktest_areainfo VALUES ('', '梅州市', '');
  92. INSERT INTO booktest_areainfo VALUES ('', '梅江区', '');
  93. INSERT INTO booktest_areainfo VALUES ('', '梅县', '');
  94. INSERT INTO booktest_areainfo VALUES ('', '大埔县', '');
  95. INSERT INTO booktest_areainfo VALUES ('', '丰顺县', '');
  96. INSERT INTO booktest_areainfo VALUES ('', '五华县', '');
  97. INSERT INTO booktest_areainfo VALUES ('', '平远县', '');
  98. INSERT INTO booktest_areainfo VALUES ('', '蕉岭县', '');
  99. INSERT INTO booktest_areainfo VALUES ('', '兴宁市', '');
  100. INSERT INTO booktest_areainfo VALUES ('', '汕尾市', '');
  101. INSERT INTO booktest_areainfo VALUES ('', '城区', '');
  102. INSERT INTO booktest_areainfo VALUES ('', '海丰县', '');
  103. INSERT INTO booktest_areainfo VALUES ('', '陆河县', '');
  104. INSERT INTO booktest_areainfo VALUES ('', '陆丰市', '');
  105. INSERT INTO booktest_areainfo VALUES ('', '河源市', '');
  106. INSERT INTO booktest_areainfo VALUES ('', '源城区', '');
  107. INSERT INTO booktest_areainfo VALUES ('', '紫金县', '');
  108. INSERT INTO booktest_areainfo VALUES ('', '龙川县', '');
  109. INSERT INTO booktest_areainfo VALUES ('', '连平县', '');
  110. INSERT INTO booktest_areainfo VALUES ('', '和平县', '');
  111. INSERT INTO booktest_areainfo VALUES ('', '东源县', '');
  112. INSERT INTO booktest_areainfo VALUES ('', '阳江市', '');
  113. INSERT INTO booktest_areainfo VALUES ('', '江城区', '');
  114. INSERT INTO booktest_areainfo VALUES ('', '阳西县', '');
  115. INSERT INTO booktest_areainfo VALUES ('', '阳东县', '');
  116. INSERT INTO booktest_areainfo VALUES ('', '阳春市', '');
  117. INSERT INTO booktest_areainfo VALUES ('', '清远市', '');
  118. INSERT INTO booktest_areainfo VALUES ('', '清城区', '');
  119. INSERT INTO booktest_areainfo VALUES ('', '佛冈县', '');
  120. INSERT INTO booktest_areainfo VALUES ('', '阳山县', '');
  121. INSERT INTO booktest_areainfo VALUES ('', '连山壮族瑶族自治县', '');
  122. INSERT INTO booktest_areainfo VALUES ('', '连南瑶族自治县', '');
  123. INSERT INTO booktest_areainfo VALUES ('', '清新县', '');
  124. INSERT INTO booktest_areainfo VALUES ('', '英德市', '');
  125. INSERT INTO booktest_areainfo VALUES ('', '连州市', '');
  126. INSERT INTO booktest_areainfo VALUES ('', '东莞市', '');
  127. INSERT INTO booktest_areainfo VALUES ('', '中山市', '');
  128. INSERT INTO booktest_areainfo VALUES ('', '潮州市', '');
  129. INSERT INTO booktest_areainfo VALUES ('', '湘桥区', '');
  130. INSERT INTO booktest_areainfo VALUES ('', '潮安区', '');
  131. INSERT INTO booktest_areainfo VALUES ('', '饶平县', '');
  132. INSERT INTO booktest_areainfo VALUES ('', '揭阳市', '');
  133. INSERT INTO booktest_areainfo VALUES ('', '榕城区', '');
  134. INSERT INTO booktest_areainfo VALUES ('', '揭东县', '');
  135. INSERT INTO booktest_areainfo VALUES ('', '揭西县', '');
  136. INSERT INTO booktest_areainfo VALUES ('', '惠来县', '');
  137. INSERT INTO booktest_areainfo VALUES ('', '普宁市', '');
  138. INSERT INTO booktest_areainfo VALUES ('', '云浮市', '');
  139. INSERT INTO booktest_areainfo VALUES ('', '云城区', '');
  140. INSERT INTO booktest_areainfo VALUES ('', '新兴县', '');
  141. INSERT INTO booktest_areainfo VALUES ('', '郁南县', '');
  142. INSERT INTO booktest_areainfo VALUES ('', '云安县', '');
  143. INSERT INTO booktest_areainfo VALUES ('', '罗定市', '');
  144. INSERT INTO booktest_areainfo VALUES ('', '湖南省', NULL);
  145. INSERT INTO booktest_areainfo VALUES ('', '长沙市', '');
  146. INSERT INTO booktest_areainfo VALUES ('', '芙蓉区', '');
  147. INSERT INTO booktest_areainfo VALUES ('', '天心区', '');
  148. INSERT INTO booktest_areainfo VALUES ('', '岳麓区', '');
  149. INSERT INTO booktest_areainfo VALUES ('', '开福区', '');
  150. INSERT INTO booktest_areainfo VALUES ('', '雨花区', '');
  151. INSERT INTO booktest_areainfo VALUES ('', '长沙县', '');
  152. INSERT INTO booktest_areainfo VALUES ('', '望城县', '');
  153. INSERT INTO booktest_areainfo VALUES ('', '宁乡县', '');
  154. INSERT INTO booktest_areainfo VALUES ('', '浏阳市', '');
  155. INSERT INTO booktest_areainfo VALUES ('', '株洲市', '');
  156. INSERT INTO booktest_areainfo VALUES ('', '荷塘区', '');
  157. INSERT INTO booktest_areainfo VALUES ('', '芦淞区', '');
  158. INSERT INTO booktest_areainfo VALUES ('', '石峰区', '');
  159. INSERT INTO booktest_areainfo VALUES ('', '天元区', '');
  160. INSERT INTO booktest_areainfo VALUES ('', '株洲县', '');
  161. INSERT INTO booktest_areainfo VALUES ('', '攸县', '');
  162. INSERT INTO booktest_areainfo VALUES ('', '茶陵县', '');
  163. INSERT INTO booktest_areainfo VALUES ('', '炎陵县', '');
  164. INSERT INTO booktest_areainfo VALUES ('', '醴陵市', '');
  165. INSERT INTO booktest_areainfo VALUES ('', '湘潭市', '');
  166. INSERT INTO booktest_areainfo VALUES ('', '雨湖区', '');
  167. INSERT INTO booktest_areainfo VALUES ('', '岳塘区', '');
  168. INSERT INTO booktest_areainfo VALUES ('', '湘潭县', '');
  169. INSERT INTO booktest_areainfo VALUES ('', '湘乡市', '');
  170. INSERT INTO booktest_areainfo VALUES ('', '韶山市', '');
  171. INSERT INTO booktest_areainfo VALUES ('', '衡阳市', '');
  172. INSERT INTO booktest_areainfo VALUES ('', '珠晖区', '');
  173. INSERT INTO booktest_areainfo VALUES ('', '雁峰区', '');
  174. INSERT INTO booktest_areainfo VALUES ('', '石鼓区', '');
  175. INSERT INTO booktest_areainfo VALUES ('', '蒸湘区', '');
  176. INSERT INTO booktest_areainfo VALUES ('', '南岳区', '');
  177. INSERT INTO booktest_areainfo VALUES ('', '衡阳县', '');
  178. INSERT INTO booktest_areainfo VALUES ('', '衡南县', '');
  179. INSERT INTO booktest_areainfo VALUES ('', '衡山县', '');
  180. INSERT INTO booktest_areainfo VALUES ('', '衡东县', '');
  181. INSERT INTO booktest_areainfo VALUES ('', '祁东县', '');
  182. INSERT INTO booktest_areainfo VALUES ('', '耒阳市', '');
  183. INSERT INTO booktest_areainfo VALUES ('', '常宁市', '');
  184. INSERT INTO booktest_areainfo VALUES ('', '邵阳市', '');
  185. INSERT INTO booktest_areainfo VALUES ('', '双清区', '');
  186. INSERT INTO booktest_areainfo VALUES ('', '大祥区', '');
  187. INSERT INTO booktest_areainfo VALUES ('', '北塔区', '');
  188. INSERT INTO booktest_areainfo VALUES ('', '邵东县', '');
  189. INSERT INTO booktest_areainfo VALUES ('', '新邵县', '');
  190. INSERT INTO booktest_areainfo VALUES ('', '邵阳县', '');
  191. INSERT INTO booktest_areainfo VALUES ('', '隆回县', '');
  192. INSERT INTO booktest_areainfo VALUES ('', '洞口县', '');
  193. INSERT INTO booktest_areainfo VALUES ('', '绥宁县', '');
  194. INSERT INTO booktest_areainfo VALUES ('', '新宁县', '');
  195. INSERT INTO booktest_areainfo VALUES ('', '城步苗族自治县', '');
  196. INSERT INTO booktest_areainfo VALUES ('', '武冈市', '');
  197. INSERT INTO booktest_areainfo VALUES ('', '岳阳市', '');
  198. INSERT INTO booktest_areainfo VALUES ('', '岳阳楼区', '');
  199. INSERT INTO booktest_areainfo VALUES ('', '云溪区', '');
  200. INSERT INTO booktest_areainfo VALUES ('', '君山区', '');
  201. INSERT INTO booktest_areainfo VALUES ('', '岳阳县', '');
  202. INSERT INTO booktest_areainfo VALUES ('', '华容县', '');
  203. INSERT INTO booktest_areainfo VALUES ('', '湘阴县', '');
  204. INSERT INTO booktest_areainfo VALUES ('', '平江县', '');
  205. INSERT INTO booktest_areainfo VALUES ('', '汨罗市', '');
  206. INSERT INTO booktest_areainfo VALUES ('', '临湘市', '');
  207. INSERT INTO booktest_areainfo VALUES ('', '常德市', '');
  208. INSERT INTO booktest_areainfo VALUES ('', '武陵区', '');
  209. INSERT INTO booktest_areainfo VALUES ('', '鼎城区', '');
  210. INSERT INTO booktest_areainfo VALUES ('', '安乡县', '');
  211. INSERT INTO booktest_areainfo VALUES ('', '汉寿县', '');
  212. INSERT INTO booktest_areainfo VALUES ('', '澧县', '');
  213. INSERT INTO booktest_areainfo VALUES ('', '临澧县', '');
  214. INSERT INTO booktest_areainfo VALUES ('', '桃源县', '');
  215. INSERT INTO booktest_areainfo VALUES ('', '石门县', '');
  216. INSERT INTO booktest_areainfo VALUES ('', '津市市', '');
  217. INSERT INTO booktest_areainfo VALUES ('', '张家界市', '');
  218. INSERT INTO booktest_areainfo VALUES ('', '永定区', '');
  219. INSERT INTO booktest_areainfo VALUES ('', '武陵源区', '');
  220. INSERT INTO booktest_areainfo VALUES ('', '慈利县', '');
  221. INSERT INTO booktest_areainfo VALUES ('', '桑植县', '');
  222. INSERT INTO booktest_areainfo VALUES ('', '益阳市', '');
  223. INSERT INTO booktest_areainfo VALUES ('', '资阳区', '');
  224. INSERT INTO booktest_areainfo VALUES ('', '赫山区', '');
  225. INSERT INTO booktest_areainfo VALUES ('', '南县', '');
  226. INSERT INTO booktest_areainfo VALUES ('', '桃江县', '');
  227. INSERT INTO booktest_areainfo VALUES ('', '安化县', '');
  228. INSERT INTO booktest_areainfo VALUES ('', '沅江市', '');
  229. INSERT INTO booktest_areainfo VALUES ('', '郴州市', '');
  230. INSERT INTO booktest_areainfo VALUES ('', '北湖区', '');
  231. INSERT INTO booktest_areainfo VALUES ('', '苏仙区', '');
  232. INSERT INTO booktest_areainfo VALUES ('', '桂阳县', '');
  233. INSERT INTO booktest_areainfo VALUES ('', '宜章县', '');
  234. INSERT INTO booktest_areainfo VALUES ('', '永兴县', '');
  235. INSERT INTO booktest_areainfo VALUES ('', '嘉禾县', '');
  236. INSERT INTO booktest_areainfo VALUES ('', '临武县', '');
  237. INSERT INTO booktest_areainfo VALUES ('', '汝城县', '');
  238. INSERT INTO booktest_areainfo VALUES ('', '桂东县', '');
  239. INSERT INTO booktest_areainfo VALUES ('', '安仁县', '');
  240. INSERT INTO booktest_areainfo VALUES ('', '资兴市', '');
  241. INSERT INTO booktest_areainfo VALUES ('', '永州市', '');
  242. INSERT INTO booktest_areainfo VALUES ('', '零陵区', '');
  243. INSERT INTO booktest_areainfo VALUES ('', '冷水滩区', '');
  244. INSERT INTO booktest_areainfo VALUES ('', '祁阳县', '');
  245. INSERT INTO booktest_areainfo VALUES ('', '东安县', '');
  246. INSERT INTO booktest_areainfo VALUES ('', '双牌县', '');
  247. INSERT INTO booktest_areainfo VALUES ('', '道县', '');
  248. INSERT INTO booktest_areainfo VALUES ('', '江永县', '');
  249. INSERT INTO booktest_areainfo VALUES ('', '宁远县', '');
  250. INSERT INTO booktest_areainfo VALUES ('', '蓝山县', '');
  251. INSERT INTO booktest_areainfo VALUES ('', '新田县', '');
  252. INSERT INTO booktest_areainfo VALUES ('', '江华瑶族自治县', '');
  253. INSERT INTO booktest_areainfo VALUES ('', '怀化市', '');
  254. INSERT INTO booktest_areainfo VALUES ('', '鹤城区', '');
  255. INSERT INTO booktest_areainfo VALUES ('', '中方县', '');
  256. INSERT INTO booktest_areainfo VALUES ('', '沅陵县', '');
  257. INSERT INTO booktest_areainfo VALUES ('', '辰溪县', '');
  258. INSERT INTO booktest_areainfo VALUES ('', '溆浦县', '');
  259. INSERT INTO booktest_areainfo VALUES ('', '会同县', '');
  260. INSERT INTO booktest_areainfo VALUES ('', '麻阳苗族自治县', '');
  261. INSERT INTO booktest_areainfo VALUES ('', '新晃侗族自治县', '');
  262. INSERT INTO booktest_areainfo VALUES ('', '芷江侗族自治县', '');
  263. INSERT INTO booktest_areainfo VALUES ('', '靖州苗族侗族自治县', '');
  264. INSERT INTO booktest_areainfo VALUES ('', '通道侗族自治县', '');
  265. INSERT INTO booktest_areainfo VALUES ('', '洪江市', '');
  266. INSERT INTO booktest_areainfo VALUES ('', '娄底市', '');
  267. INSERT INTO booktest_areainfo VALUES ('', '娄星区', '');
  268. INSERT INTO booktest_areainfo VALUES ('', '双峰县', '');
  269. INSERT INTO booktest_areainfo VALUES ('', '新化县', '');
  270. INSERT INTO booktest_areainfo VALUES ('', '冷水江市', '');
  271. INSERT INTO booktest_areainfo VALUES ('', '涟源市', '');
  272. INSERT INTO booktest_areainfo VALUES ('', '湘西土家族苗族自治州', '');
  273. INSERT INTO booktest_areainfo VALUES ('', '吉首市', '');
  274. INSERT INTO booktest_areainfo VALUES ('', '泸溪县', '');
  275. INSERT INTO booktest_areainfo VALUES ('', '凤凰县', '');
  276. INSERT INTO booktest_areainfo VALUES ('', '花垣县', '');
  277. INSERT INTO booktest_areainfo VALUES ('', '保靖县', '');
  278. INSERT INTO booktest_areainfo VALUES ('', '古丈县', '');
  279. INSERT INTO booktest_areainfo VALUES ('', '永顺县', '');
  280. INSERT INTO booktest_areainfo VALUES ('', '龙山县', '');

areas.sql

source areas.sql

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

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

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

  1. urlpatterns = [
  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语法如下:

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

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

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

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

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

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

  1. class 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语法如下:

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

c)调用语法如下:

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

2.2 元选项

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

数据表的默认名称为:

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

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

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

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

Django框架(七):模型(三) 关联、模型类的属性的更多相关文章

  1. WEB框架-Django框架学习(二)- 模型层

    今日份整理为模型层 1.ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库, ...

  2. Django框架基础知识08-表关联对象及多表查询

    1.自定义主键字段的创建 AutoFiled(pirmary_key=True) # 一般不会自定义,int类型,自增长 一般不自定义主键. 2.order_by asc desc from djan ...

  3. python+Django框架运用(三)

    Django模型 模式指的是根据数据库中数据表的结构来创建出来的class,每一张表到Python中就是一个 class,表中的每一个列,到Python中就是class的一个属性. 在模型中可以完成对 ...

  4. Python笔记(七):字典、类、属性、对象实例、继承

    (一)  简单说明 字典是Python的内置数据结构,将数据与键关联(例如:姓名:张三,姓名是键,张三就是数据).例如:下面这个就是一个字典 {'姓名': '张三', '出生日期': '2899-08 ...

  5. Django框架 (七) Django ORM模型

    ORM简介 查询数据层次图解:如果操作mysql,ORM是在pymysq之上又进行了一层封装

  6. django学习笔记(三)模型

    1.创建一个django app: python manage.py startapp books 2.validate 命令检查你的模型的语法和逻辑是否正确.一旦你觉得你的模型可能有问题,运行 py ...

  7. Django框架之第八篇(模型层补充)--数据库的查询与优化:only/defer,select_related与prefetch_related,事务

    在设置外键字段时需要注意: 当你使用django2.x的版本时候,在建立外键关系时,需要你手动添加几个关键点参数 models.cascade #设置级联删除 db_constraints 数据库查询 ...

  8. Python Django框架笔记(三):django工作方式简单说明和创建用户界面

    (一)  说明 简单说明下django的工作方式,并举2个例子. (二)  Django工作方式 假定我们有下面这些文件 ,这里在前2篇的基础上增加了 templates目录(存放html文件) 和s ...

  9. Django框架之第三篇模板语法(重要!!!)

    一.什么是模板? 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.模板语法分类 一.模板语法之变量:语法为 {{ }}: 在 Django 模板中遍历复杂数据结构的关键 ...

随机推荐

  1. JS - 逻辑运算符 之 && 和 II

    1.JS中的||符号: 只要“||”前面为false,不管“||”后面是true还是false,都返回“||”后面的值. 只要“||”前面为true,不管“||”后面是true还是false,都返回“ ...

  2. 利用QRCoder生成二维码

    1.项目添加QRCoder.dll 和System.Drawing.dll的引用 2.创建二维码公共处理类(QRCoderHelper.cs) /// <summary> /// 二维码公 ...

  3. ServletConfig详解

    ServletConfig是Servlet中的init()方法的参数类型,服务器会在调用init()方法时传递ServletConfig对象给init()方法.   ServletConfig对象封装 ...

  4. 干货分享:Research Essay写作规范详解

    同学们在刚到国外时觉得一切都很新鲜,感觉到处都在吸引着他们,但是大部分留学生在刚碰到Research Essay便是一头包.其实Research Essay也没有想象中的那么难,只是留学生们初次接触, ...

  5. opencv+python实时人脸检测、磨皮

    import numpy as np import cv2 cap = cv2.VideoCapture(0) face_cascade = cv2.CascadeClassifier("d ...

  6. mock的使用及取消,node模仿本地请求:为了解决前后端分离,用户后台没写完接口的情况下

    借鉴:https://www.jianshu.com/p/dd23a6547114 1.说到这里还有一种是配置node模拟本地请求 (1)node模拟本地请求: 补充一下 [1]首先在根目录下建一个d ...

  7. 部署Ambari Server实战案例

    部署Ambari Server实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备三台虚拟机(需要自行安装jdk环境) 1>.角色分配 NameNode节点: h ...

  8. POJ 1944:Fiber Communications

    Fiber Communications Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 4236   Accepted: 1 ...

  9. c++ opencv显示对话框

    IplImage *pl = cvLoadImage("e:\\3.bmp", 1); cvNamedWindow("123", 1); cvShowImage ...

  10. Sql server 表表达式

    1.表表达式概述 (1)表表达式(table expression) 是一个命名的查询表达式.代表一个有效的关系表 (2)在DML 中,使用表表达式和使用其他表非常类似 (3)sqlserver 支持 ...