美文网首页
五、定义模型,并生成数据表

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

作者: daley_磊 | 来源:发表于2019-02-13 16:31 被阅读0次

定义模型

  • 模型定义在 应用中的models.py 文件下
    1. 模型必须引入:from django.db import models 模块
    2. 模型类必须继承 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())
#这样也可以直接创建

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

相关文章

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

    定义模型 模型定义在 应用中的models.py 文件下模型必须引入:from django.db import ...

  • Django项目——定义模型&生成数据表

    定义模型:有一个数据表,就对应一个模型生成数据表 1.在modles.py文件中定义模型 这里以班级和学生v表为例...

  • django 基础

    models.py文件,定义模型类 模型类继承自models.Model类 生成数据表 激活模型:编辑settin...

  • Django开发流程

    流程目录: 创建Django项目 创建应用 模型:数据库配置数据库表的定义定义模型类生成数据表 模板 视图 服务器...

  • 机器学习线性回归实例

    生成直线数据并加入噪音画图显示 定义模型的输入和输出 定义模型的反向传播 定义损失函数 训练模型

  • Hibernate 自动生成表要注意事项

    自动生成默认的数据表 以类名、字段名为表的表名和列名来自动生成数据表。 自定义的方式生成数据表 这种方式可以自定义...

  • Django的models(一)

    定义模型类 有一个数据表,就有一个模型类与之对应 打开models.py文件,定义模型类 引入包from djan...

  • 智能超市管理系统

    E-R图 ER模型转换成数据表,并指出主键

  • ThinkPHP笔记-模型

    模型定义 ThinkPHP中的模型类主要用于操作数据表。 模型类通常需要继承系统的\Think\Model类或其子...

  • ThinkPHP 5.0 模型

    定义模型 继承于 think\Model 一个模型对应一张数据表,名称对应 对应多张表时,添加模型关联方法 thi...

网友评论

      本文标题:五、定义模型,并生成数据表

      本文链接:https://www.haomeiwen.com/subject/rsitkqtx.html