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

yizhihongxing

我们一起来详细讲解下“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写天气预报查询网站

    下面为您详细讲解“用Django写天气预报查询网站”的完整攻略,包含两条示例说明。 一、Django基础知识 1.1 什么是Django? Django 是一个高级的 Python web 框架,可以快速搭建 Web 应用程序和网站。Django 非常强大,提供许多内置功能,如 ORM 、模板和缓存等。 1.2 安装Django 在安装 Django 之前,…

    Django 2023年5月16日
    00
  • Django入门使用示例

    以下是“Django入门使用示例”的完整攻略。 Django入门使用示例 本文将介绍Django的入门使用示例,包括如何创建Django项目和应用,如何定义模型,并进行数据迁移和数据查询等操作。本文的示例采用Django 3.2 版本。 创建Django项目和应用 首先,我们需要创建Django项目。在命令行中输入以下命令: django-admin sta…

    Django 2023年5月16日
    00
  • python3-django+uwsgi+supervisor+nginx跳坑指南(记录) 出现:unix:///tmp/supervisor.sock no such file

      首先运行django项目:在项目目录内: python manage.py runserver 0.0.0.0:8000 外部服务器访问:http://www.xxx.com:8000/ 可以正常运行  ###参考:https://blog.51cto.com/chenx1242/1859830 如果不对,不太对?这是因为django项目里设置了ALLO…

    Django 2023年4月11日
    00
  • Django REST FrameWork中文教程4:验证和权限

    目前,我们的API对谁可以编辑或删除代码段没有任何限制。我们想要一些更高级的行为,以确保: 代码段始终与创建者相关联。 只有身份验证的用户可以创建片段。 只有片段的创建者可以更新或删除它。 未经身份验证的请求应具有完全只读访问权限。 将信息添加到我们的模型 我们将对我们的Snippet模型类进行一些更改。首先,我们添加几个字段。其中一个字段将用于表示创建代码…

    Django 2023年4月13日
    00
  • django 上传头像并预览 3选1

    注册页面的头像上传 register.html<!DOCTYPE html> 1 <html lang=”en”> 2 <head> 3 <meta charset=”UTF-8″> 4 <title>Title</title> 5 </head> 6 <body&gt…

    Django 2023年4月13日
    00
  • [Django_1_0]初次见面

    文章将写安装和第一次使用时候的操作。文章是照着文档做的,但是以后的内容会有不一样。 安装 pip install django 我这里是使用python3的,也可以使用 pip3 install django 安装成功之后也可以通过 python3 -m django –version 查看版本,如果安装失败,则会返回 No model named dja…

    2023年4月9日
    00
  • Django数据迁移时提示 ModuleNotFoundError: No module named ‘users’

    执行数据迁移时提示找不到对应的APP,错误如下:这个错误主要是路径找不到引起的,只需在settings文件夹中添加app文件路径即可 sys.path.insert(0, os.path.join(BASE_DIR, ‘apps’))

    Django 2023年4月12日
    00
  • django-创建Template(模板)

    1、什么是Templates   1)、HTML文件   2)、使用lDTL–Django模板语言(Django Template Language)   3)、可以使用第三方模板(如Jinja2)–在setting中TEMPLATES中修改   2、Templates开发步骤: 在App(项目)的根目录下创建名叫Templates的目录 在该目录下创建…

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