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

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

作者: 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 }

    相关文章

      网友评论

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

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