本文概述
- 注册/使用模型
- Django模型字段
- 栏位选项
Django Model是django.db.models.Model的子类, 模型类的每个字段都代表一个数据库字段(列)。
Django为我们提供了一个数据库抽象API, 该API可让我们从映射表中创建, 检索, 更新和删除记录。
模型在Models.py文件中定义。该文件可以包含多个模型。
【Django模型】让我们来看一个示例, 我们正在创建一个模型Employee, 它具有两个字段first_name和last_name。
from django.db import modelsclass 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实例表示。 |
first_name = models.CharField(max_length=50) # for creating varchar columnrelease_date = models.DateField()# for creating date columnnum_stars = models.IntegerField()# for creating integer column
栏位选项 每个字段都需要一些用于设置列属性的参数。例如, CharField需要mac_length来指定varchar数据库。
适用于所有字段类型的通用参数。所有都是可选的。
栏位选项 | 细节 |
---|---|
Null | Django将在数据库中将空值存储为NULL。 |
Blank | 用于允许字段为空白。 |
Choices | 2元组的可迭代(例如列表或元组), 用作该字段的选择。 |
Default | 字段的默认值。这可以是值或可调用对象。 |
help_text | 额外的“帮助”文本将与表单窗口小部件一起显示。即使你的字段未在表单上使用, 它对于文档记录也很有用。 |
primary_key | 此字段是模型的主键。 |
Unique | 该字段在整个表格中必须是唯一的。 |
我们创建了一个学生模型, 该模型在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。该表的结构如下所示。