个性化阅读
专注于IT技术分析

Django模型

本文概述

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

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

Django为我们提供了一个数据库抽象API, 该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 类AutoField(** options) 它是一个自动递增的IntegerField。
BigAutoField class BigAutoField(**options) 它是一个64位整数, 非常类似于AutoField, 不同之处在于它保证可以容纳1到9223372036854775807之间的数字。
BigIntegerField BigIntegerField(** options)类 它是一个64位整数, 非常类似于IntegerField, 不同之处在于它保证可以容纳从-9223372036854775808到9223372036854775807的数字。
BinaryField 类BinaryField(** options) 一个用于存储原始二进制数据的字段。
BooleanField 类BooleanField(** options) 正确/错误字段。此字段的默认表单窗口小部件是CheckboxInput。
CharField 类DateField(auto_now = False, auto_now_add = False, **选项) 它是一个日期, 在Python中由datetime.date实例表示。
DateTimeField 类DateTimeField(auto_now = False, auto_now_add = False, **选项) 它是一个日期, 在Python中由datetime.date实例表示。
DateTimeField 类DateTimeField(auto_now = False, auto_now_add = False, **选项) 它用于日期和时间, 在Python中由datetime.datetime实例表示。
DecimalField 类DecimalField(max_digits = None, decimal_places = None, **选项) 它是一个固定精度的十进制数字, 在Python中由Decimal实例表示。
DurationField class DurationField(**options) 用于存储时间段的字段。
EmailField 类EmailField(max_length = 254, **选项) 这是一个CharField, 用于检查该值是否为有效的电子邮件地址。
FileField class FileField(upload_to =无, max_length = 100, **选项) 这是一个文件上传字段。
FloatField 类FloatField(** options) 它是Python中由float实例表示的浮点数。
ImageField 类ImageField(upload_to =无, height_field =无, width_field =无, max_length = 100, **选项) 它继承了FileField的所有属性和方法, 还验证了上载的对象是有效的图像。
IntegerField IntegerField(** options)类 它是一个整数字段。在Django支持的所有数据库中, -2147483648到2147483647之间的值都是安全的。
NullBooleanField class NullBooleanField(**options) 与BooleanField类似, 但是允许将NULL作为选项之一。
PositiveIntegerField class PositiveIntegerField(** options) 类似于IntegerField, 但必须为正数或零(0)。在Django支持的所有数据库中, 0到2147483647之间的值都是安全的。
SmallIntegerField 类SmallIntegerField(** options) 它就像IntegerField, 但仅允许在特定点(与数据库有关)下的值。
TextField class TextField(**options) 大文本字段。该字段的默认表单窗口小部件是Textarea。
TimeField 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 2元组的可迭代(例如列表或元组), 用作该字段的选择。
Default 字段的默认值。这可以是值或可调用对象。
help_text 额外的“帮助”文本将与表单窗口小部件一起显示。即使你的字段未在表单上使用, 它对于文档记录也很有用。
primary_key 此字段是模型的主键。
Unique 该字段在整个表格中必须是唯一的。

Django模型范例

我们创建了一个学生模型, 该模型在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模型
赞(0)
未经允许不得转载:srcmini » Django模型

评论 抢沙发

评论前必须登录!