模型

2023-07-30 17:23:37 浏览数 (1)

在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

0 人点赞