python django定义模型类

models模型类

模型类需定义在子应用的 models.py 中

常用字段类型

类型 说明
CharField 字符串类型字段(必须有一个参数 maxlength,校验最大字符长度)
IntegerField 整数字段
FloatField (浮点数) 小数字段 (max_digits总位数(不包括小数点和符号),decimal_places 小数位数)
DateTimeField 日期字段 (日期+时间)
DateField 日期字段
DecimalField (精确)小数字段
FileField 文件字段 (保存和处理上传的文件)
Imagefield 图片字段(保存和处理上传的图片)
IPAddressField IP字段
SmalllntegerField 小整数字段
TextField 文本字段,一般超过 4000个字符时使用
URLField 网页地址字段
BooleanField 布尔类型字段、值为Truue或False
AutoField 自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自增属性

常用字段字段属性

属性 说明
null (null=True | False) 数据库字段的设置是否可以为空 (数据库进行验证)
blank (blank=True | False) 字段是否为空django会进行校验 (表单进行验证)
choices 轻量级的配置字段可选属性的定义 choices=((0,男),(1,女))
default 字段的默认选项,可以是一个值或是一个回调函数,当是一个函数对象时,在创建新对象时,函数调用
primary_key (=True | False) 一般不需要定义是否为主键,如果没有指明主键的话,diango胡自动添加一个默认主键: id=models.AutoField(primary_key=True)
unique 是否唯一 (对于数据表而言)
verbose_name 对于字段的一个可读性更高的名称,若不指定该属性,默认使用字段的属性名称
db_index 当该值为 True 时,为该字段创建索引
db_column 数据库中用来表示该字段的名称,如果未指定,那么 Diango 将会使用 Field 名作为字段名

模型类创建案例

不同的数据库中 对应的 sql语句不一样, django为了简单, 统一采用 模型类,模型类 定义在 app/models.py 文件中

from django.db import models
 
class Books(models.Model):
    # 模型类中不需要指定 id字段,会自动生成
 
    name = models.CharField(max_length=20,verbose_name="书名")
    # 数据库的可变字符串类型   varchar(20)
    # max_length : 指定可变字符串的最大长度
 
    price = models.DecimalField(max_digits=7, decimal_places=2, verbose_name='价格')
    # 数据库的  金钱有关的字段   decimal(7,2)
    # max_digits: 指定数字的最大位数,包括小数
    # decimal_places: 指定小数的 位数
 
    hire_date = models.DateField(verbose_name='出版日期')
    # 数据库的  日期字段   date
    # auto_now_add: 在对象添加时,自动设置为 当前时间, 后期不再改变
    # auto_now: 在对象每次更新时,时间都会设置为更新时的时间
    # 避免矛盾,`auto_now`,`auto_now_add`,`default`不能同时出现,一个字段属性只能有其中一条设置,
    # 当设置了`auto_now`,或`auto_now_add`时,也会让该字段默认具有`blank=True`(字段可以为空)属性
 
    author = models.CharField(max_length=20, verbose_name='作者')
    num = models.IntegerField(verbose_name='库存', default=0)
    publish = models.CharField(max_length=20, verbose_name='出版社')
    type = models.CharField(max_length=10,verbose_name="类别")
    sales_volume = models.IntegerField(verbose_name='销量', default=0)
 
 
 
    def __str__(self):
        # 修改对象的描述信息, 此时查看图书对象,已经不是默认的对象地址信息, 而是图书对象的书名
        return self.name
 
 
    # 元选项一定属于模型类中的一部分,不能单独使用
    class Meta:
        db_table = 'tb_book'      # 指定表名, 默认为 app名_模型类名
        verbose_name = '图书'     # amdin中显示的表的名字,为单数形式
        verbose_name_plural = verbose_name      # 复数形式

数据库迁移

模型类创建好后,将模型类迁移到数据库

在终端执行迁移命令,会在对应app下生成一个迁移文件migrations 用来记录数据库迁移的信息

 如果数据库出错,需删库重创时,必须把migrations 文件删掉再重新创建,否则报错

# 生成迁移文件
python manage.py makemigrations
 
# 执行迁移文件同步数据到数据库
python manage.py migrate
© 版权声明
THE END
喜欢就支持一下吧
点赞5赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容