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连接mysql数据库步骤记录

    以下是非常详细的Django连接mysql数据库步骤记录的完整攻略以及包含的两个示例: 初步准备 连接mysql数据库需要依赖于Django的数据库框架以及mysql driver。我们可以通过Pip进行安装。 安装Django pip install Django 安装mysql驱动 pip install mysqlclient 示例1:新建Django…

    Django 2023年5月16日
    00
  • django-beautifulsoup的简单使用

    一:介绍:简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据。官方解释如下: ”’ Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。 它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。 ”’ 1,安装…

    Django 2023年4月12日
    00
  • Python的Django框架中forms表单类的使用方法详解

    Python Django框架中forms表单类的使用方法详解 在 Django 框架中使用 forms 表单类是非常方便的。本文将详细解释如何创建和使用 forms 表单类。 创建forms表单类 要创建表单类,您需要导入 Django 的 forms 模块并创建一个类。类定义包括表单字段以及它们的验证规则。下面是一个简单的表单类示例: from djan…

    Django 2023年5月16日
    00
  • Django 学习之Celery(芹菜)

    Celery 介绍 文档:http://docs.celeryproject.org/en/latest/index.htmlCelery 是一个功能完备,即插即用的异步任务队列,可以独立于主进程运行,在主进程退出后,也不影响队列中的任务的执行。任务执行异常退出,重新启动后,会继续执行队列中的其他任务,同时可以缓存停止期间接收的工作任务,这个功能依赖于消息队…

    Django 2023年4月11日
    00
  • Python – Django – ORM Django 终端打印 SQL 语句

    在 settings.py 中添加以下内容: LOGGING = { ‘version’: 1, ‘disable_existing_loggers’: False, ‘handlers’: { ‘console’:{ ‘level’:’DEBUG’, ‘class’:’logging.StreamHandler’, }, }, ‘loggers’: { ‘…

    Django 2023年4月10日
    00
  • python框架django中结合vue进行前后端分离

    使用Python框架Django和JavaScript框架Vue结合进行前后端分离,能够提高开发效率,优化代码结构和分工。下面是一个详细的攻略,分为两个示例说明。 示例一:前后端分离项目创建 1. 创建Django项目 使用Django的脚手架 django-admin 可以快速创建一个Django项目,命令如下: django-admin startpro…

    Django 2023年5月16日
    00
  • django 中的setting 各种配置logging MySQL

    AUTH_USER_MODEL = ‘APP.UserInfo’#Django允许你通过修改setting.py文件中的 AUTH_USER_MODEL 设置覆盖默认的User模型,其值引用一个自定义的模型。 MySQL 数据库 的 setting配置 DATABASES = { ‘default’: { ‘ENGINE’: ‘django.db.backe…

    Django 2023年4月13日
    00
  • Python – Django – 模板语言之自定义过滤器

    在 app01 下新建一个 templatetags 的文件夹,然后创建 myfilter.py 文件 这个 templatetags 名字是固定的,myfilter 是自己起的 myfilter.py: from django import template register = template.Library() @register.filter(na…

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