# 概述
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的时候选择 第一个选项、手动输入默认值
管理器对象
标签:11,管理器,name,models,db,default,blank,True From: https://www.cnblogs.com/littlecc/p/18116086