在app/models.py中定义模型
代码语言:javascript复制from django.db import models
# 定义模型类
class Title(models.Model):
# 定义模型字段
id = models.IntegerField(primary_key=True)
title = models.CharField(max_length=50)
time = models.DateTimeField()
def __str__(self):
return self.title
# 后台管理页面显示的标题
class Meta:
verbose_name = '标题'
verbose_name_plural = '标题'
将模型注册到后台,早app/admin.py中注册
代码语言:javascript复制from .models import *
from django.contrib import admin
# 注册Title到后台
@admin.register(Title)
class TitleAdmin(admin.ModelAdmin):
# 后台显示的字段
list_display = ['id', 'title', 'time']
字段类型:
代码语言:javascript复制# int自增列,必须填入参数 primary_key=True。当model中如果没有自增列,则自动会创建一个列名为id的列。
AutoField
# 布尔字段,值为True或False
Booleanfield
# 支持Null、True、False三种值
NullBooleanField
# 字符类型,必须提供max_length参数, max_length表示字符长度。
CharField
# 大文本字段,一般超过4000个字符时使用
TextField
# 一个整数类型,范围在 -2147483648 to 2147483647。
IntegerField
# 十进制浮点数 , 参数maxdigits表示总位数, 参数decimalplaces表示小数位数
Decimalfield
# 浮点数
FloatField
# 日期字段,日期格式 YYYY-MM-DD,相当于Python中的datetime.date()实例。
DateField
# 时间,参数同date
TimeField
# 日期时间字段,格式 YYYY-MM-DD HH:MM:ss[.uuuuuu],相当于Python中的datetime.datetime()实例。
DateTimeField
# 上传文件字段
FileField
# 继承于FileField,对上传的 内容进⾏行行校验,确保是有效的图⽚片
imageField
字段选项:
代码语言:javascript复制# 如果为True,表示允许为空,默认值是False
null
# 如果为True,则该字段允许为空白,默认值是False
blank
# 字段的名称,如果未指定,则使用属性的名称
db_column
# 若值为True, 则在表中会为此字段创建索引,默认值是False
db_index
# 默认
default
# 若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用
primary_key
# 如果为True, 这个字段在表中必须有唯一值,默认值是False
unique
# (时间字段独有)配置auto_now_add=True,创建数据记录的时候会把当前时间添加到数据库。
auto_now_add
# (时间字段独有)配置上auto_now=True,每次更新数据记录的时候会更新该字段。
auto_now
外键字段:
代码语言:javascript复制# 一对一
OneToOneField
# 一对多
ForeignKey
# 多对多
ManyToManyField
title = models.ForeignKey(Title, on_delete=models.CASCADE)
on_delete选项:当删除关联表中的数据时,当前表与其关联的行的行为。
代码语言:javascript复制# 删除关联数据,与之关联也删除
models.CASCADE
# 删除关联数据,引发错误IntegrityError
models.DO_NOTHING
# 删除关联数据,引发错误ProtectedError
models.PROTECT
# 删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空)
models.SET_NULL
# 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)
models.SET_DEFAULT
# 删除关联数据,与之关联的值设为指定值
models.SET
# 是否在数据库中创建外键约束,默认为True。
db_constraint