我们一起来详细讲解下“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_name
和 last_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
的默认名称为People
。db_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
属性建立起了部门到员工之间的关联。
同时,我们为 Department
和 Employee
模型类分别定义了Meta类来存储额外信息,并通过 verbose_name_plural
定义了个性化的表格名称,db_table
属性可以为模型指定数据库名字。
总结
Django 的模型类提供了非常简洁和高效的创建和操作数据库表格的手段。我们可以通过在models.py 文件中编写模型类来定义数据库表格和其包含的列,这样我们就可以直接在业务逻辑中,类似于操作 ORM 对象一样,操作模型类来实现 CRUD 操作,非常方便。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django 模型类(models.py)的定义详解 - Python技术站