五、定义模型,并生成数据表
2019-02-13 本文已影响0人
daley_磊
定义模型
- 模型定义在 应用中的
models.py
文件下- 模型必须引入:
from django.db import models
模块 - 模型类必须继承
models.Model
类
- 模型必须引入:
from django.db import models
# Create your models here.
# 创建班级model (Grades)
class Grades(models.Model):
grade_name = models.CharField(max_length=20)
grade_date = models.DateTimeField()
grade_num =models.IntegerField()
is_delete = models.BooleanField(default=False)
# 创建学生model (Students)
class Students(models.Model):
stu_name = models.CharField(max_length=20)
stu_age = models.IntegerField()
stu_sex = models.BooleanField()
stu_grade = models.ForeignKey('Grades', on_delete=models.CASCADE) #外键字段,关联班级表
is_delete = models.BooleanField(default=False)
关联字段on_delete
:
在django2.0后,定义外键和一对一关系的时候需要加on_delete选项,此参数为了避免两个表里的数据不一致问题,不然会报错:
TypeError: init() missing 1 required positional argument: 'on_delete'
在老版本中这个 on_delete=models.CASCADE
为默认值
参数说明:
on_delete有CASCADE、PROTECT、SET_NULL、SET_DEFAULT、SET()五个可选择的值
CASCADE:此值设置,是级联删除。
PROTECT:此值设置,是会报完整性错误。
SET_NULL:此值设置,会把外键设置为null,前提是允许为null。
SET_DEFAULT:此值设置,会把设置为外键的默认值。
SET():此值设置,会调用外面的值,可以是一个函数。
一般情况下使用CASCADE就可以了。
如此每一个 类 对应数据库中的每一个表。数据表的主键会自动生成并自增,所以不需要创建。
生成数据表
- 生成迁移文件
进入命令终端(进入当前项目下):
python3 manage.py makemigrations
会在 当前应用下的migrations
目录下创建迁移文件,此时数据库中并没有生成数据表
- 执行迁移
进入命令终端(进入当前项目下):
python3 manage.py migrate #等待执行完成
mysql -uroot -proot #进入数据库
use db_name #进入指定数据库
show tables #显示所以数据表
+--------------------------------------+
| Tables_In_db_name |
+--------------------------------------+
|auth_group |
|auth_group_permissions |
|auth_permission |
|auth_user |
|auth_user_groups |
|auth_user_user_permissions |
|django_admin_log |
|django_content_type |
|django_migrations |
|django_session |
|my_app_grades |
|my_app_students |
+--------------------------------------+
desc my_app_grades
+------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| grade_name | varchar(20) | NO | | NULL | |
| grade_date | datetime(6) | NO | | NULL | |
| grade_num | int(11) | NO | | NULL | |
| is_delete | tinyint(1) | NO | | NULL | |
+------------+-------------+------+-----+---------+----------------+
可以看到两张数据表已经生成,my_app_grades,my_app_students
并且自增主见自动生成,并不需要我们去创建
表名:应用_model类名
测试数据操作
进入到python shell 环境
进入命令终端(进入当前项目下):
python3 manage.py shell #进入python 环境
>>> from my_app.models import Grades,Students
>>> from django.utils import timezone
>>> from datetime import *
#创建班级
>>> grade = Grades()
>>> grade.grade_name = '语文'
>>> grade.grade_num = 50
>>> grade.grade_date = datetime.now()
>>> grade.save()
#创建学生
>>> stu = Students()
>>> stu.stu_name = '张三'
>>> stu.stu_age = 20
>>> stu.stu_sex =False
>>> stu.stu_grade = grade
# 使用 Django 提供的 QuerySet API
>>> Grades.objects.create(grade_name='数学',grade_num='34',grade_date=datetime.now())
#这样也可以直接创建
如此就添加了一个班级和一个学生。