11、 Django-模型基础-models-ORM框架-管理器对象
# 概述 django根据属性的类型确定以下信息 当前选择的数据库支持字段的类型 渲染管理表单时使用的默认htm1控件 在管理站点最低限度的验证 django会为表增加自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后则django不会再生成默认的主键列 #属性命名限制 ·遵循标识符规则 由于django的查询方式,不允许使用连续的下划线 定义属性时,需要字段类型,字段类型被定义在diango.db.models.fields目录下,为了方便使用被导入到django.db.models中 #使用方式 导入from diango.db import models 通过models.Field创建字段类型的对象,赋值给属性
#逻辑删除和物理删除 对于重要数据都做逻辑删除(界面删除数据库里还在),不做物理删除(数据库中删除) 实现方法是定义isdelete属性,类型为BooleanField默认值为False(逻辑删除) is delete =models.BooleanField(default=False)
常用参数字段
#常用字段选项(通过字段选项,可以实现对字段的约束) 1、null=True -- 数据库中字段是否可以为空 2、blank=True -- django的 Admin 中添加数据时是否可允许空值 -- 一般null=True & blank=True 搭配着用,出现null=True就用上blank=True 3、primary key = True -- 主键,对AutoField设置主键后,就会代替原来的自增 id列 4、auto_now和auto_now_add -- auto_now: 自动创建---无论添加或修改,都是当前操作的时间 -- auto_now_add 自动创建---永远是创建时的时间 5、choices (后台admin下拉菜单) -- USER_TYPE_LIST =( (1, '超级用户'), (2, '普通用户'), ) user_type = models.IntegerField(choiceS=USER TYPE LIST, default=1, verbose_name='用户类型') 6、max_length #最大长度 7、default #默认值 8、verbose_name #Admin(后台显示的名称)中字段的显示名称 9、name|db_column #数据库中的字段名称 10、unique=True #不允许重复 11、db_index = True #数据库索引,例如:如果你想通过name查询的更快的话,给他设置为索引即可 12、editable=True # 在Admin里是否可编辑,不可编辑则不显示 13、设置表名 class Meta: db_table =person
案例
models.py
from django.db import models # Create your models here. class UserModel(models.Model): #创建主键、uid会成为主键、原来的id不会创建 uid = models.AutoField(auto_created=True, primary_key=True) #CharField:字符串类型, unique:唯一值, db_index:索引 name = models.CharField(max_length=30, unique=True, db_index=True) #IntegerField:整数类型, default为默认值 age = models.IntegerField(default=18) #布尔类型 sex = models.BooleanField(default=True) #TextField 长字符串、大文本 #null=True 表示可以为空 #blank=True 在Admin管理界面可以为空 info = models.TextField(null=True, blank=True) #浮点型 小数 salary = models.FloatField(default=10000.3456) #models.DecimalField 十进制小数 #max_digits=4 数字的最大长度、包含小数位 #decimal_places=2 保留小数点后2位 money = models.DecimalField(max_digits=4, decimal_places=2, default=10.34) #日期 birthday = models.DateField(default='1996-06-11') birthday2 = models.DateTimeField(auto_now=True) #每次修改后都会自动修改该时间位最新的修改时间 birthday3 = models.DateTimeField(auto_now_add=True) #第一次添加数据时候的时间、以后都不会变 #上传文件或者图片 字段 #upload_to='static/uploads' :文件图片上传的路径 #blank=True 在admin管理界面可以为空 icon = models.FileField(null=True, blank=True, upload_to='static/uploads') #ImageField() : 只能上传图片 #使用ImageFiled 要安装 Pillow 模块 icon2 = models.ImageField(null=True, blank=True, upload_to='static/uploads') #其它约束 chioces = ((1, '青铜'), (2, '大师'), (3, '王者')) #choices 是下拉菜单 verbose_name: 是字段名 user_type = models.IntegerField(choices=chioces, default=1, name='utype', verbose_name='用户类型') #editable=False 为不可编辑、不会在admin界面显示这个字段、在数据库中还是会存在 user_type2 = models.IntegerField(choices=chioces, default=1, editable=False, name='utype2', verbose_name='用户类型2') class Meta: db_table = '修改的表名(定义表名)' #数据迁移 #python .\manage.py makemigrations #python .\manage.py migrate #注意:如果前面已经做过了数据迁移了、后续再修改数据(如添加字段的时候)、需要再重新迁移数据、 # 注意:后新增的数据要添加默认值、或者如果不添加默认值时 执行迁移makemigrations的时候选择 第一个选项、手动输入默认值
管理器对象
本文作者:little小新
本文链接:https://www.cnblogs.com/littlecc/p/18116086
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步