【django】创建模型类(已更新)

在人生的道路上,不管是潇洒走一回,或者是千山独行,皆须是自己想走的路,虽然,有的人并不是很快就能找到自己的方向和道路,不过,只要坚持到底,我相信,就一定可以找到自己的路,只要找到路,就不必怕路途遥远了。

导读:本篇文章讲解 【django】创建模型类(已更新),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

ORM框架

a、数据库:需要提前手动创建数据库
b、数据表:与ORM框架中的模型类一一对应
c、字段:模型类中的类属性(Field子类)
d、记录:类似于模型类的多个实例

一、创建模型类

模型类创建在应用目录/models.py文件中。
模型类必须继承Model类,位于包django.db.models中。
接下来首先以“影片-人物”管理为例进行演示
1 定义 在models.py ⽂件中定义模型类。

from django.db import models


# Create your models here.

# 创建影片模型类
class FilmInfo(models.Model):
    fid = models.AutoField(primary_key=True, verbose_name='影片编号')
    fname = models.CharField(max_length=20, verbose_name='影片名称')
    playcount = models.IntegerField(default=0, verbose_name='播放量')
    commentcount = models.IntegerField(default=0, verbose_name='评论量')
    pub_date = models.DateField(null=True, verbose_name='发版时间')
    is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')

    class Meta:
        db_table = 'filminfo'  # 指定数据库表名
        verbose_name = '影片信息'  # 在admin站点中显示的名称

    def __str__(self):
        '''定义每个数据对象的显示信息'''
        return self.fname


# 创建人物模型类
class PeopleInfo(models.Model):
    GENDER_CHOICES = (
        (0, '男'),
        (1, '女')
    )
    uid = models.AutoField(primary_key=True, verbose_name='演员编号')
    uname = models.CharField(max_length=20, verbose_name='演员')
    gender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbose_name='性别')
    desc = models.CharField(max_length=200, null=True, verbose_name='描述')
    # 外键约束:人物属于哪部电影
    film = models.ForeignKey(FilmInfo, on_delete=models.CASCADE, verbose_name='外键')
    is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')

    class Meta:
        db_table = 'peopleinfo'
        verbose_name = '演员信息'

    def __str__(self):
        '''定义每个数据对象的显示信息'''
        return self.uname

1) 数据库表名
模型类如果未指明表名,Django默认以 ⼩写应⽤名_⼩写模型类名 为数据库表名。可通过在内部类中db_table指明数据库表名。

db_table = 'filminfo'  # 指定数据库表名

2) 关于主键
django会为表创建⾃动增⻓的主键列,每个模型只能有⼀个主键列,如果使⽤选项设置某属性为主键列后django不会再创建⾃动增⻓的主键列。

默认创建的主键列属性为id,primary_key=True表示设置主键

3) 属性命名限制
不能是python的保留关键字。 不允许使⽤连续的下划线,这是由django的查询⽅式决定的。 定义属性时需要指定字段类型,通过字段类型的参数指定选项,语法如下:
属性 = models.字段类型(选项)

二、字段类型说明

在这里插入图片描述

a、CharField类型必须指定max_length参数(该字段的最大字节数)max_length=20表示最大20个字符
b、在DateFiled、DateTimeField等字段中,指定auto_now_add=True,在创建一条记录时,会自动创建记录时的时间作为该字段的值,后续在更新数据时,就不再修改
c、在DateFiled、DateTimeField等字段中,指定auto_now=True,在更新一条记录时,会自动将更新记录的时间作为该字段的值,

三、字段选项说明

在这里插入图片描述
null是数据库范畴的概念,blank是表单验证范畴的

d、项目名称可能会重复,为了不让项目名称重复,需要给一个字段添加唯一约束,unique=True(默认为False)
e、使用default 指定默认值(如果指定默认值后,在创建记录时,该字段传递,会使用默认值)
f、null=True指定,前端创建数据时,可以指定该字段为null,默认为null=False,DRF进行反序列化器输入时才有效
g、blank=True指定,前端创建数据时,可以指定该字段为空字符串,默认为blank=False,DRF进行反序列化器输入时才有效

特别注意:只要修改表(ORM框架),就需要重新生成迁移脚本 python manage.py makemigrations 子应用名

四、外键

在设置外键时,需要通过on_delete选项指明主表删除数据时,对于外键引⽤表数据如何处理,在django.db.models中包含了可选常量:
在这里插入图片描述

五、迁移

生成迁移脚本
python manage.py makemigrations
执行迁移脚本
python manage.py migrate

六、添加测试数据

mysql -h '192.168.1.xxx' - u 'zl1' -p

show databases;

在这里插入图片描述

use film_db;

show tables;

在这里插入图片描述
查看数据表
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123500.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!