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搭建一个基金模拟交易系统教程

    下面是使用Django搭建基金模拟交易系统的完整攻略: 1. 准备工作 在开始之前,需要确认是否已经安装Python和Django。如果还没有安装,请先进行安装。 2. 创建Django项目 使用Django创建一个新项目,运行如下命令: django-admin startproject fund_simulator 这个命令将创建一个名为fund_sim…

    Django 2023年5月16日
    00
  • web之django的序列化器汇总

      django的rest_framework的一大特色是序列化器,其封装了视图中关于用户请求,验证及响应数据的处理部分,使得程序简洁化。此DRF框架中将数据模型对象转化为json、xml等可传输或存档的格式的过程称为序列化,反之称为反序列化。序列化器是专注于此类行为的类,有自定义序列化器,模型类序列化器,视图集合三类。 1.视图函数 2.类视图   1.自…

    Django 2023年4月12日
    00
  • 杂记:Django和static,Nginx配置路径,json_schema

    前记:知识无处不在,要懂得珍惜,找到适合自己的方法高效地学习有价值的知识,不念过去,不畏将来。 Django对待静态资源,在非前后端分离时的常识 Django会对项目app下的static文件夹的静态资源进行收集,同名则按优先级指向,要自己加资源可以在settings.py的STATICFILES_DIRS进行额外指定,STATIC_URL=‘/static…

    Django 2023年4月10日
    00
  • 【Django数据库】如何将一个表自定义的key列还原成id列作为key

    例如下表UserVerifyCode,自定义了idUser这个key     修改成如下,去掉idUer的主键属性   使用python manage.py makemigrations,id是新增列,不能为空,所以必须输入默认值     解决办法 Step1:清空表的数据 Step2:上图上选择1方法,输入int(0) Step3: id列我们的都知道,实…

    Django 2023年4月13日
    00
  • 《Django By Example》第一章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example原作者:Antonio Melé 2016年12月10日发布(没有进行校对,有很多错别字以及模糊不清的语句,请大家见谅) 2017年2月7日精校完成(断断续续的终于完成了第一章精校,感觉比直接翻译还要累,继续加油) 2017年2月10日再次…

    Django 2023年4月11日
    00
  • python+Django CRM客户关系管理系统开发(一)–admin首页功能实现

    一、项目介绍 学习crm管理系统开发,将详细步骤记录在这里。 主要需求是,做一个培训机构的客户关系管理系统,通过后台能够管理学生,老师,销售 二、思路 做一个后台管理系统,仿照着Django的admin,做一个管理系统,好处是能够与项目结合,以后可以复制到其他项目中 初步分析,表结构如下: 这里就不放表了,自己随便写几个表就行 三、backadmin功能开发…

    Django 2023年4月11日
    00
  • Python Django基础二之URL路由系统

    下面是Python Django基础二之URL路由系统的完整攻略。 1. 什么是URL路由系统 在Django中,URL路由系统就像是一个分配任务的调度员,当用户访问某个URL时,它会把这个请求分发给相应的视图函数进行处理。URL路由系统被设计得非常灵活,可以支持各种不同的URL格式。 2. URL路由系统的配置 Django中的URL路由系统的配置是在ur…

    Django 2023年5月16日
    00
  • django之froms组件

    一:froms组件的作用   在我们进行web端的开发的时候,常常用到对表单的数据的获取并发送给后台,无论是对通过from表单提交还是通过ajax提交。我们都免不了对表单输入框的数据进行获取,在后端对数据进行验证并把验证结果再返回前端页面。常常有些验证逻辑很繁琐,一个不小心可能会出错,大费心力。而djingo自带的from组件,可以对表单自动生成,表单数据验…

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