Django 模型
在Django中,模型是一个用于包含必要字段和方法的类。每个模型类映射到数据库中的一个表。
Django模型是 django.db.models.Model 的子类,模型类的每个字段表示一个数据库字段(列)。
Django为我们提供了一个数据库抽象API,允许我们从映射表中创建、检索、更新和删除记录。
模型定义在 Models.py 文件中。此文件可以包含多个模型。
让我们来看一个例子,我们创建了一个叫做 Employee 的模型,它有两个字段 first_name 和 last_name 。
from django.db import models
class Employee(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
first_name 和 last_name 字段指定为类属性,每个属性映射到数据库列。
这个模型将在数据库中创建一个表,看起来如下所示。
CREATE TABLE appname_employee (
"id" INT NOT NULL PRIMARY KEY,
"first_name" varchar(30) NOT NULL,
"last_name" varchar(30) NOT NULL
);
创建的表格包含自动创建的 id字段 。表格的名称是应用程序名称和模型名称的组合,可以进一步更改。
注册/使用模型
创建模型后,将模型注册到 settings.py 中的 INSTALLED_APPS 中。
例如,
INSTALLED_APPS = [
#...
'appname',
#...
]
Django模型字段
在Model类内定义的字段是映射表的列名。字段名不应该是Python的保留字,如clean、save或delete等。
Django提供了多种内置字段类型。
字段名 | 类 | 特定 |
---|---|---|
AutoField | class AutoField (**options) | 它是一个自动递增的IntegerField。 |
BigAutoField | class BigAutoField (**options) | 它是一个64位整数,类似于AutoField,但它保证适合从1到9223372036854775807的数字。 |
BigIntegerField | class BigIntegerField (**options) | 它是一个64位整数,类似于IntegerField,但它保证适合从-9223372036854775808到9223372036854775807的数字。 |
BinaryField | class BinaryField (**options) | 用于存储原始二进制数据的字段。 |
BooleanField | class BooleanField(**options) | 一个真/假字段。该字段的默认表单小部件是一个复选框。 |
CharField | class DateField(auto_now=False, auto_now_add=False, **options) | 一个日期字段,由一个datetime.date实例在Python中表示。 |
DateTimeField | class DateTimeField(auto_now=False, auto_now_add=False, **options) | 一个日期字段,由一个datetime.date实例在Python中表示。 |
DateTimeField | class DateTimeField(auto_now=False, auto_now_add=False, **options) | 用于日期和时间的字段,由一个datetime.datetime实例在Python中表示。 |
DecimalField | class DecimalField(max_digits=None, decimal_places=None, **options) | 它是一个固定精度的小数,通过Python中的Decimal实例进行表示。 |
DurationField | class DurationField(**options) | 用于存储时间段的字段。 |
EmailField | class EmailField(max_length=254, **options) | 它是一个CharField,用于验证值是否为有效的电子邮件地址。 |
FileField | class FileField(upload_to=None, max_length=100, **options) | 用于文件上传的字段。 |
FloatField | class FloatField(**options) | 它是一个浮点数,通过Python中的float实例进行表示。 |
ImageField | class ImageField(upload_to=None, height_field=None, width_field=None, max_length=100, **options) | 它继承了FileField的所有属性和方法,但也验证了上传的对象是否是有效的图像。 |
IntegerField | class IntegerField(**options) | 这是一个整数字段。在Django支持的所有数据库中,-2147483648到2147483647之间的值是安全的。 |
NullBooleanField | class NullBooleanField(**options) | 类似于BooleanField,但允许将NULL作为其中一个选项。 |
PositiveIntegerField | class PositiveIntegerField(**options) | 类似于IntegerField,但必须是正数或零(0)。在Django支持的所有数据库中,0到2147483647之间的值是安全的。 |
SmallIntegerField | class SmallIntegerField(**options) | 它类似于一个IntegerField,但只允许在某个特定值以下(与数据库相关)的值。 |
TextField | class TextField(**options) | 一个大型文本字段。该字段的默认表单部件是Textarea。 |
TimeField | class TimeField(auto_now=False, auto_now_add=False, **options) | 表示时间的字段,在Python中用datetime.time实例表示。 |
Django模型字段示例
first_name = models.CharField(max_length=50) # for creating varchar column
release_date = models.DateField() # for creating date column
num_stars = models.IntegerField() # for creating integer column
字段选项
每个字段都需要一些参数,用于设置列属性。例如,CharField 需要 mac_length 来指定 varchar 数据库。
所有字段类型都可用的常见参数。所有参数都是可选的。
字段选项 | 详情 |
---|---|
Null | Django会在数据库中将空值存储为NULL。 |
Blank | 允许字段为空。 |
Choices | 用作此字段选择项的可迭代对象(例如列表或元组)。 |
Default | 字段的默认值。可以是一个值或可调用对象。 |
help_text | 与表单小部件一起显示的额外“帮助”文本。即使字段不用于表单,它也很有用于文档。 |
primary_key | 该字段是模型的主键。 |
Unique | 此字段在整个表中必须是唯一的。 |
Django模型示例
我们创建了一个名为Student的模型,其中包含以下代码: models.py 文件。
//models.py
class Student(models.Model):
first_name = models.CharField(max_length=20)
last_name = models.CharField(max_length=30)
contact = models.IntegerField()
email = models.EmailField(max_length=50)
age = models.IntegerField()
之后,通过使用以下命令进行迁移。
python3 manage.py makemigrations myapp
它将创建一个表 myapp_student 。表的结构如下所示。