zoukankan      html  css  js  c++  java
  • Django笔记&教程 4-1 模型(Models)介绍

    Django 自学笔记兼学习教程第4章第1节——模型(Models)介绍
    点击查看教程总目录

    参考:https://docs.djangoproject.com/en/2.2/topics/db/models/

    1 介绍

    模型是关于数据的唯一、确定的信息源。它包含存储数据的基本字段和行为。通常,每个模型映射到一个数据库表。

    以上是官方文档的介绍,但对于初学者,这太绕了,
    粗略的讲:
    建立一个模型(Model)相当于建立了一个数据库表(table)。
    模型规定属性,就是数据库表规定字段(field)。
    每用模型类建立一个实例,都是在数据库表里插入一条数据。
    准确地讲,可以这么理解模型:

    1. 每个数据库表,都是用来记录一种事物的数据信息的,比如学生表,是用来记录学生这种对象的多个维度的信息。每个信息维度(比如姓名、性别、生日、邮箱、学号)对应数据库表的一个字段。
    2. 对于学生这种对象,我们可以建立一个模型类(Model),模型的每个属性对应学生一个信息维度(比如姓名、性别、生日、邮箱、学号)。
    3. 数据库表的每一行,都是一个具体的学生的信息,对应也就是模型类(Model)的一个实例。

    2 示例

    以简单的教务管理系统中的学生这种对象为例,
    首先,我们分析出该对象需要的属性:

    • 姓名(name)
    • 性别(gender)
    • 生日(birthday)
    • 邮箱(email)
    • 个人简介(info)
    • 年级(grade)
    • 年级子学号(number)
    • 密码(password)

    同时,一个学生能由年级+年级子学号唯一确定,则年级+年级子学号为其主键。

    那么其model的示例写法如下

    from django.db import models
    
    
    class Student(models.Model):
        gender = [
            ("m", "男"),
            ("f", "女")
        ]
    
        name = models.CharField(max_length=50, verbose_name="姓名")
        gender = models.CharField(max_length=10, choices=gender, default='m', verbose_name="性别")
        birthday = models.DateField(verbose_name="生日")
        email = models.EmailField(verbose_name="邮箱")
        info = models.CharField(max_length=255, verbose_name="个人简介", help_text="一句话介绍自己,不要超过250字")
    
        grade = models.CharField(max_length=4, verbose_name="年级")
        number = models.CharField(max_length=6, verbose_name="年级子学号")
        password = models.CharField(max_length=30, verbose_name="密码")
    
        class Meta:
            constraints = [
                # 复合主键:保证 grade和number组合的student_id唯一
                models.UniqueConstraint(fields=['grade', 'number'], name='student_id'),
            ]
    

    具体的代码意思,我们在本章下一小节详细说明。

    3 更新到数据库

    在django框架下,并不是添加好模型(model)就万事大吉了
    添加好模型后,我们还需要手动执行脚本,才能根据模型生成对应的数据库表。
    在项目文件夹下,打开命令行,按行依次执行:

    python manage.py makemigrations
    python manage.py migrate
    

    解释下上面这两句的作用
    其中第1句会生成对应的迁移(migrations)命令。
    如果是第一次运行的项目,由于是
    那么会在./your_app/migrations文件夹下,
    生成0001_initial.py用于记录迁移(migrations)命令
    第一次运行也会在项目文件夹下,生成一个空的 database:db.sqlite3
    第2句会执行第一句中生成的迁移(migrations)命令。
    执行完第二句,改动才真正更新到数据库文件了。

    当然,实际上,数据库中的改动并不是简单的添加了这一个模型的事,有兴趣的朋友可以打开此时的db.sqlite3看看。无法直接打开,需要使用对应的软件,我一般用DB Browser (SQLite),里面生成了很多个表,不过这个细说起来就复杂了。

    以后我们如果修改了模型的属性之类,也要执行上面两句脚本去更新对应的数据库表。

  • 相关阅读:
    mongodb远程连接配置
    CentOs系统设置python版本
    python非官方模块下载大全
    Series.str——字符串批量处理方法
    gevent-协程用法
    与vnpy相关的有用博客网址
    vnpy官网说明文档网址
    Opencv各种编码器下视频文件大小对比
    Linux下python默认版本切换成替代版本
    CPU拓扑结构
  • 原文地址:https://www.cnblogs.com/BigShuang/p/14285587.html
Copyright © 2011-2022 走看看