五、定义模型,并生成数据表

2019-02-13  本文已影响0人  daley_磊

定义模型

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())
#这样也可以直接创建

如此就添加了一个班级和一个学生。
\color{Orange}{推存使用 Django 提供的 QuerySet API }

上一篇下一篇

猜你喜欢

热点阅读