Django——图书管理系统(六)

zy010101 2021-01-21 07:57:30
系统 管理 django 图书 图书管


本文将讲述设置外键操作,关于外键的更多知识,大家可以看看数据库的知识。当然我依旧会在注释中做出一些解释。

现在我们已经有了出版社这张表,现在我们添加书籍这张表。由于出版社和书籍之间是有关系的,我们使用外键来连接两者之间的关系。在models.py的内容如下:

from django.db import models
# Create your models here.
"""
书和出版社之间是有关系的。书是出版社出版的。
例如机械工业出版社出版了《数据结构和算法分析——C语言描述》这本书。
那么,我们下面的出版社这张表就需要和书这张表就有一个关系,一个出版社可以出版多本书。
"""
class Publisher(models.Model):
"""
Django的models会默认在数据库中创建主键
"""
name = models.CharField(max_length=128) # 出版社名称
class Book(models.Model):
name = models.CharField(max_length=128) # 书名
publisher_id = models.ForeignKey('Publisher', on_delete=models.CASCADE)
# 外键默认关联的是Publisher表的主键。
'''
ForeignKey的第一个参数是需要关联的表的类名,可以直接写类名,但是这个时候一定是该类被定义在前文。
也可以是把类名变成字符串,这样就不要求该类一定被定义在前文。
第二个参数on_delete在Django2.0之后必须填写,models.CASCADE表示级联删除。级联删除意味着,我删除了某个出版社,那么该出版社对应的所有书籍也被删除。
models.PROTECT:保护,如果某个出版社还有书籍存在,那么就不允许删除该出版社。
models.SET_DEFAULT:表示删除后设为默认值
models.SET_NULL:删除后设为空值
models.SET(x):删除后设为某个值
'''

增加一张表之后,我们应该执行数据库迁移命令。如下图所示。

这样就完成了数据库的迁移。之后,你会发现表的结构如下。

publisher_id_id这个名字很奇怪,这是因为models会自动给外键加上_id这个后缀,所以,修改我们的Book类如下:

class Book(models.Model):
name = models.CharField(max_length=128) # 书名
publisher = models.ForeignKey('Publisher', on_delete=models.CASCADE)

修改了models之后,必须重新执行数据库迁移命令。

数据库迁移之后,如下所示:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

版权声明
本文为[zy010101]所创,转载请带上原文链接,感谢
https://cloud.tencent.com/developer/article/1776726

  1. Python 爬虫进阶 - 前后端分离有什么了不起,过程超详细!
  2. 【python】使用pip提示ModuleNotFoundError
  3. 【python】虚拟环境搭建
  4. Advanced test | Python written test questions
  5. Fire! Open source Python ticket grabbing artifact, come home to see this wave of New Year!
  6. Python crawler advanced - before and after the end of the separation of what great, super detailed process!
  7. [Python] prompt modulenotfounderror with PIP
  8. Building a virtual environment
  9. Serverless 架构下用 Python 轻松搞定图像分类和预测
  10. Easy image classification and prediction with Python under serverless architecture
  11. python协程爬取某网站的老赖数据
  12. Python coroutine crawls Laolai data of a website
  13. 使用Python分析姿态估计数据集COCO的教程
  14. Using Python to analyze the data set coco of attitude estimation
  15. win环境 python3 flask 上手整理 环境搭建(一)
  16. Getting started with win environment python3 flash
  17. Python实现一个论文下载器,赶紧收藏
  18. win环境 python3 flask 上手整理 快速上手-基础操作(二)
  19. Python 中常见的配置文件写法
  20. Python to achieve a paper Downloader, quickly collect
  21. Python批量 png转ico
  22. 使用line_profiler对python代码性能进行评估优化
  23. 使用line_profiler对python代码性能进行评估优化
  24. Getting started with Python 3 flash in win environment
  25. Common ways to write configuration files in Python
  26. Python会在2021年死去吗? Python 3.9最终版本的回顾
  27. Python batch PNG to ICO
  28. Using line_ Profiler evaluates and optimizes the performance of Python code
  29. Using line_ Profiler evaluates and optimizes the performance of Python code
  30. Will Python die in 2021? A review of the final version of Python 3.9
  31. Python3 SMTP send mail
  32. Understanding closures in Python: getting started with closures
  33. Python日志实践
  34. Python logging practice
  35. [python opencv 计算机视觉零基础到实战] 十、图片效果毛玻璃
  36. [python opencv 计算机视觉零基础到实战] 九、模糊
  37. 10. Picture effect ground glass
  38. [Python opencv computer vision zero basis to actual combat] 9. Fuzzy
  39. 使用line_profiler對python程式碼效能進行評估優化
  40. Using line_ Profiler to evaluate and optimize the performance of Python code
  41. LeetCode | 0508. 出现次数最多的子树元素和【Python】
  42. Leetcode | 0508
  43. LeetCode | 0530. 二叉搜索树的最小绝对差【Python】
  44. LeetCode | 0515. 在每个树行中找最大值【Python】
  45. Leetcode | 0530. Minimum absolute difference of binary search tree [Python]
  46. Leetcode | 0515. Find the maximum value in each tree row [Python]
  47. 我来记笔记啦-搭建python虚拟环境
  48. Let me take notes - building a python virtual environment
  49. LeetCode | 0513. 找树左下角的值【Python】
  50. Leetcode | 0513. Find the value in the lower left corner of the tree [Python]
  51. Python OpenCV 泛洪填充,取经之旅第 21 天
  52. Python opencv flood fill, day 21
  53. Python爬虫自学系列(二)
  54. Python crawler self study series (2)
  55. 【python】身份证号码有效性检验
  56. [Python] validity test of ID number
  57. Python ORM - pymysql&sqlalchemy
  58. Python ORM - pymysql&sqlalchemy
  59. centos7 安装python3.8
  60. centos7 安装python3.8