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的时候选择 第一个选项、手动输入默认值

 

管理器对象

posted @ 2024-07-01 22:33  little小新  阅读(1)  评论(0编辑  收藏  举报