Django表的多对一关系
1.Django的命令 1. 安装Django pip install django==1.11.16 pip install django==1.11.16 -i 源 2. 创建项目 django-admin startproject 项目名称 3. 启动项目 cd 项目目录下 有manage.py python manage.py runserver # 127.0.0.1:8000 python manage.py runserver 80 # 127.0.0.1:80 python manage.py runserver 0.0.0.0:80 # 0.0.0.0:80 4. 创建APP python manage.py startapp app名称 5. 数据库迁移的命令 1. python manage.py makemigrations # 记录models的变更记录 2. python manage.py migrate # 把变更记录同步到数据库中 2.Django的settings配置 1. 静态文件 STATIC_URL = '/static/' # 别名 STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static'), os.path.join(BASE_DIR,'static1'), ] 1. 数据库 ENGINE: mysql NAME: 数据库名字 USER: 用户名 PASSWORD: 密码 ‘’ HOST: IP地址 127.0.0.1 PORT: 3306 1. 注释CSRF的中间件 可以提交POST请求 1. TEMPLATES 模板文件 DIRS [os.path.join(BASE_DIR,'templates')] 1. INSTALLED_APPS =[ 'app01' 或者 ‘app01.apps.App01Config’ 3.get和post 1. get ——获取一个页面 浏览器地址栏中输入地址,回车 a标签 form表单默认发送get请求 携带参数:127.0.0.1:8000/edit_publisher/?pk=1 request.GET {} 1. post ——提交数据 form表单指定method=‘post’ request.POST 4.使用mysql数据库的流程 1. 创建一个mysql数据库 2. 在settings中配置: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'bookmanager', 'HOST': '127.0.0.1', 'PORT': 3306, 'USER': 'root', 'PASSWORD': '', } } 3. 告诉Django使用pymysql模块连接mysql数据库 在与settings同级目录下__init__.py中写: import pymysql pymysql.install_as_MySQLdb() 4. 在app下的models中写类(继承models.Model) class Publisher(models.Model): # app01_publisher pid = models.AutoField(primary_key=True) # pid 主键 name = models.CharField(max_length=32, unique=True) # 出版社名称 varcahr(32) 5. 执行数据库迁移的命令 1. python manage.py makemigrations # 记录models的变更记录 2. python manage.py migrate # 把变更记录同步到数据库中 5.ORM操作 对应关系: 类 ——》 表 对象 ——》 数据行(记录) 属性 ——》 字段 from app01 import models 增加: models.Publisher.objects.create(name='xx出版社') 查询: models.Publisher.objects.get(name='xx出版社') ——》 一个对象 models.Publisher.objects.filter(name='xx出版社') ——》 一个对象列表 models.Publisher.objects.all() ——》 一个对象列表 所有数据的对象 删除: models.Publisher.objects.get(name='xx出版社') .delete() models.Publisher.objects.all() .delete() 修改: obj=models.Publisher.objects.get(name='xx出版社') obj.name = '新的名字' # 在内存中做修改 obj.save() # 保存在数据库中 6.模板的语法 render(request,'模板的文件名',{'new_name':'新华出版社','errr_msg':'数据已存在'}) 1. 变量 {{ new_name }} ——》 新华出版社 1. for循环 {% for i in 可迭代的 %} {{ forloop.counter }} 循环的次数 {{ i }} {{ i.name }} {{ i.pk}} {% endfor %} 1.书籍的管理 书籍和出版社 多对一 书籍的表结构 id name 创建外键: class Book(models.Model): title = models.CharField(max_length=32, unique=True) # 书籍的名称 publisher = models.ForeignKey('Publisher', on_delete=models.CASCADE) # 关联了出版社
![](https://img2018.cnblogs.com/blog/1458764/201812/1458764-20181204173553714-972270579.png)
查询:
新增:
编辑:
![](https://img2018.cnblogs.com/blog/1458764/201812/1458764-20181204173852165-2138357753.png)
模板语法: if判断
![](https://img2018.cnblogs.com/blog/1458764/201812/1458764-20181204173822217-2089229229.png)