Django 模型

Django 模型

在Django中,模型是一个用于包含必要字段和方法的类。每个模型类映射到数据库中的一个表。

Django模型是 django.db.models.Model 的子类,模型类的每个字段表示一个数据库字段(列)。

Django为我们提供了一个数据库抽象API,允许我们从映射表中创建、检索、更新和删除记录。

模型定义在 Models.py 文件中。此文件可以包含多个模型。

让我们来看一个例子,我们创建了一个叫做 Employee 的模型,它有两个字段 first_namelast_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_namelast_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 。表的结构如下所示。

Django 模型

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程