Django 模型类(models.py)的定义详解

我们一起来详细讲解下“Django 模型类(models.py)的定义详解”。

什么是Django模型类

Django 模型类是用来在数据库中创建表格的一个抽象,也是Django 框架中的一项非常重要的功能。模型类/数据模型是指定义方法中包含了存储数据的结构,将数据存储在数据库中,可以理解为Django的“数据表”。

通过Django模型类,可以通过定义属性来表示表格中的列,并定义表格名、索引、主键等信息。同时,Django还使用ORM(对象关系映射)技术,使得我们可以通过类(models.py)操作数据库,而不必“写 SQL 语句”或“操作数据库”。

如何定义Django模型类

我们可以通过编辑应用程序中的models.py文件来定义Django模型类。应用程序是由框架中的不同小部件组成的,而应用程序模块中的 models.py 就是定义应用程序中模型/数据模型的地方

models.py 文件中,我们可以使用 python 的类来定义模型类。模型类类可以通过继承 Django 的 models.Model 类来创建,结构如下:

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

上述代码中定义了一个名为 Person 的模型类,并定义了两个属性first_namelast_name,两个属性都是CharField类型,CharField是用于存储字符的字段类型,参数 max_length 指定了该字段的最大长度。

上述代码中的models.Model 是Django中的基础模型类,所有的模型类都要继承该类。

在模型类中,我们还可以定义模型的信息,如表名、基于哪个数据源的信息、字段级别的约束条件等。下面摘取一些常用信息的示例:

from django.db import models

class Person(models.Model):
    GENDER = (
        ('M', 'Male'),
        ('F', 'Female'),
    )

    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    gender = models.CharField(choices=GENDER, max_length=6)
    birth_date = models.DateField()

    class Meta:
        verbose_name_plural = "People"
    db_table = 'my_people'

在上面的示例代码中,我们做了以下操作:

  • 使用 CHOICES 项来表示存在多个只有少数取值的属性时,可以使用 “choices” 参数。系统会自动在表中建立字典,表中数据的值为字段的第一项,而显示的名字是第二个参数。

  • 添加birth_date字段,其字段的类型为DateField,用于存储出生日期。

  • Meta 类用于存放模型类的扩展信息,verbose_name_plural 改变模型实例的默认显示名字。例如,我们可以改变 Person 的默认名称为 Peopledb_table 属性可以为模型指定数据库名字。

示例1:创建一个学生信息表格

现在,我们来创建一个学生信息表格。假设学生信息需要包含学生的名字、出生年月日、所属班级、父母的电话等信息

from django.db import models

class Student(models.Model):
    SEX = (
        ('M', 'Male'),
        ('F', 'Female'),
    )

    name = models.CharField(max_length=50)
    sex = models.CharField(choices=SEX, max_length=10)
    birth = models.DateField()
    grade = models.CharField(max_length=20)
    phone = models.CharField(max_length=15, unique=True)

    class Meta:
        verbose_name_plural = "Students"
        db_table = 'student_info'

上面的示例代码中,我们为学生信息表格定义了Student 模型类,包括姓名、性别、出生日期、所属班级和父母的电话五个字段。其中,姓名、所属班级和父母的电话都是字符类型,通过 CharField 定义,而性别是列表取值类型。birth字段的类型为DateField,用于存储学生的出生日期。

示例2:创建一个部门与员工表格

下面我们来创建一个部门及员工信息表格,一个部门对应多个员工,一个员工只属于一个部门。

from django.db import models

class Department(models.Model):
    name = models.CharField(max_length=50, unique=True, verbose_name="部门名称")
    description = models.CharField(max_length=200, blank=True, verbose_name="部门描述")

    def __str__(self):
        return self.name

    class Meta:
        verbose_name_plural = "departments"
        db_table = 'department_info'

class Employee(models.Model):
    name = models.CharField(max_length=50, verbose_name='员工姓名')
    number = models.CharField(max_length=50, unique=True, verbose_name='员工编号')
    birth = models.DateField(verbose_name ='出生日期')
    sex = models.BooleanField(default=True, verbose_name='员工性别')
    department = models.ForeignKey(Department, on_delete=models.CASCADE, verbose_name='所属部门')

    def __str__(self):
        return self.name

    class Meta:
        verbose_name_plural = "employees"
        db_table = 'employee_info'

上述示例代码,我们定义了一个 Employee 模型类,包含员工的姓名、编号、出生日期、性别和所属部门五个字段,员工属于唯一的一个部门。另外,我们还定义了 Department 模型类,其包括名称和描述两个字段。其中department字段通过ForeignKey属性建立起了部门到员工之间的关联。

同时,我们为 DepartmentEmployee 模型类分别定义了Meta类来存储额外信息,并通过 verbose_name_plural 定义了个性化的表格名称,db_table 属性可以为模型指定数据库名字。

总结

Django 的模型类提供了非常简洁和高效的创建和操作数据库表格的手段。我们可以通过在models.py 文件中编写模型类来定义数据库表格和其包含的列,这样我们就可以直接在业务逻辑中,类似于操作 ORM 对象一样,操作模型类来实现 CRUD 操作,非常方便。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django 模型类(models.py)的定义详解 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • django框架之drf:2、restful规范,序列、反序列化,drf安装及使用(django原生接口及drf接口编写)

    Django之drf 一、restful规范 1、概念 ​ REST全称是Representational State Transfer,中文意思是表述:表征性状态转移,它首次出现在2000年Roy Fielding的博士论文中。 ​ RESTful是一种定义Web API接口的设计风格,尤其适用于前后端分离的应用模式中 2、REST的十个规范 数据的安全保…

    Django 2023年4月13日
    00
  • 如何Docker化Python Django应用程序

    下面详细讲解如何 Docker 化 Python Django 应用程序的完整攻略。 1. 安装 Docker 首先需要安装 Docker,可以前往 Docker 官网 下载对应版本的 Docker,根据官网指引进行安装。 2. 创建 Django 应用程序 接着创建一个 Django 应用程序,可以使用如下命令: $ django-admin startp…

    Django 2023年5月16日
    00
  • python中的django是做什么的

    Django 是 Python 的一个流行的 Web 框架,它提供了一个高效且易于使用的开发环境,用于简化 Web 应用程序的创建和维护。Django 提供了许多有用的功能,使得开发 Web 应用程序变得更加快速、更加简便。 Django 可以帮助我们快速构建复杂的 Web 应用程序。其主要功能包括: URL 路由:Django 可以轻松地映射 URL 到应…

    Django 2023年5月15日
    00
  • Django笔记五之字段类型

    这篇笔记介绍字段的类型 Field Type。 Django 的model 下的 field 对应的是 MySQL 中的表字段,而我们定义的 field 的类型则对应 MySQL 中的字段类型。 本次主要介绍以下几种: CharField IntegerField DateField/DateTimeField BooleanField FloatField…

    2023年4月10日
    00
  • Django解决datetime类型数据不能json序列化问题

      场景: 通常数据库的时间字段都是自动添加,或者datetime形式填入,这时候取出来,如果你不循环把它变成字符串,就会报错Object of type ‘datetime’ is not JSON serializable,所以通过一个继承类方式,来改变datetime类型数据序列化问题,会很方便。   写法: import datetime class…

    Django 2023年4月12日
    00
  • 一个把数据转化成Excel导出的程序 python Django

    把从数据库查询出来数据导出 源码下载!!!!! 效果图 登入界面 主页面 查询到数据 导出   打开得到文件     项目地址,源码下载  

    2023年4月10日
    00
  • django中render()与render_to_response()区别

    render()与render_to_response()均是django中用来显示模板页面的,但是在django1.3之后,render()便比render_to_response()更加招人待见!最明显的就是前者会自动使用RequestContext,而后者需要coding进去,例如: render(request,’share.html’, {‘reg…

    Django 2023年4月11日
    00
  • Python+Django搭建自己的blog网站

    首先我们将以下面两个示例为例,详细讲解“Python+Django搭建自己的blog网站”的完整攻略。 示例1 1. 创建项目和应用 首先需要安装Django,可以通过命令行输入pip install Django来进行安装。安装完成后,我们创建一个Django项目,可以通过输入如下命令创建: django-admin startproject myblog…

    Django 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部