iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python Django模型详解
  • 651
分享到

Python Django模型详解

2024-04-02 19:04:59 651人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录Django模型字段类型字段类型的参数外键总结DjanGo模型 Django的模型定义在models.py文件中。模型是MVT中的M,也相当于mvc中的M。 在Django中,模

DjanGo模型

Django的模型定义在models.py文件中。模型是MVT中的M,也相当于mvc中的M。

在Django中,模型必须继承自Model类。例如:


from django.db import models
# Create your models here.
class BookInfo(models.Model):       # 一个模型类就会对应生成数据库中的一张表
    """书籍模型"""  
    name = models.CharField(max_length=128, verbose_name='名称')        # 类的属性就是数据表中的字段。
    pub_date = models.DateField(verbose_name='发布日期',null=True)
    readcount = models.IntegerField(default=0, verbose_name='阅读量')
    commentcount = models.IntegerField(default=0, verbose_name='评论量')
    is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')
    class Meta:     # class Meta是固定写法
        db_table = 'bookinfo'      # 指明数据库表名
        verbose_name = '图书'       # 在admin站点中显示的名称

注意

1.模型类如果未指明表名,Django默认以小写app应用名_小写模型类名为数据库表名,一般我们会通过db_table指明数据库表名。

2.django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列。默认创建的主键列属性为id,也可以使用pk,意为primary key.

3.字段名称中不能出现双下划线,因为这是Django的查询语法之一。

自Django3.2后,可以在settings.py中配置DEFAULT_AUTO_FIELD参数来设置主键的数据类型,默认是DEFAULT_AUTO_FIELD = ‘django.db.models.BigAutoField',在Django3.2之前,默认生成的主键数据类型是AutoField.

下面是Django中常用的字段类型的详情

字段类型

类型 说明
BigAutoField 自动增长的BigIntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性
BooleanField 布尔字段,值为True或False
NullBooleanField 支持Null、True、False三种值
CharField 字符串,参数max_length表示最大字符个数
TextField 大文本字段,一般超过4000个字符时使用
IntegerField 整数
DecimalField 十进制浮点数, 参数max_digits表示总位数, 参数decimal_places表示小数位数
FloatField 浮点数
DateField 日期, 参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为False; 参数auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为False; 参数auto_now_add和auto_now是相互排斥的,组合将会发生错误
TimeField 时间,参数同DateField
DateTimeField 日期时间,参数同DateField
FileField 上传文件字段
ImageField 继承于FileField,对上传的内容进行校验,确保是有效的图片

下面是字段类型中的参数

字段类型的参数

参数 说明
null 如果为True,表示允许为空,默认值是False
blank 如果为True,则该字段允许为空白,默认值是False
db_column 字段的名称,如果未指定,则使用属性的名称
db_index 若值为True, 则在表中会为此字段创建索引,默认值是False
default 为字段指定默认值
primary_key 若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用
unique 如果为True, 这个字段在表中必须有唯一值,默认值是False
choices 该参数是从一系列的二元组中提供选项

注意

1.CharField字段必须要指定参数max_length

2.还可以为字段指定参数verbose_name,这个参数主要是用来在admin管理页面使用,其实是和本地化有关的。例如可以在上面的name字段指定参数verbose_name=“书籍名称”,那么在admin管理页面就会看到书籍名称。

3.null参数是数据库层面的,设置null=True之后,表示数据库的该字段可以为空;blank参数是表单层面(html),blank=True之后,表示表单填写该字段的时候可以不填。

外键

外键这个东西,通常都是在业务逻辑层面来实现的,而不是在数据库中实现。但是通常大家学习的数据库课程中,都会有数据库设计范式,其中有个第三范式就是专指的外键约束。在这里只是简单的介绍一下。下面是另外一个模型,和前面的BookInfo模型通过外键关联起来。


class PeopleInfo(models.Model):
    """人员模型"""
    GENDER_CHOICES = (
        (0, 'male'),
        (1, 'female')
    )
    name = models.CharField(max_length=20, verbose_name='名称')
    gender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbose_name='性别')
    description = models.CharField(max_length=200, null=True, verbose_name='描述信息')
    book = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbose_name='图书')  # 外键
    is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')
    class Meta:
        db_table = 'peopleinfo'
        verbose_name = '人物信息'

下面重点来说一下choices这个参数和models.ForeignKey。
choices参数就是从我们定义的二元组(GENDER_CHOICES)中获取值。二元组的第一个值会储存在数据库中,而第二个值将只会用于在表单中显示。对于一个模型实例,要获取该字段二元组中相对应的第二个值,使用 get_FOO_display() 方法。例如:获取上面的性别信息,可以使用get_gender_display()方法。
外键:通过使用models.ForeignKey来设置外键,ForeignKey的第一个参数是要关联的模型类名,第二个参数是on_delete。它的常用值可以如下:
CASCADE级联,删除主表数据时连通一起删除外键表中数据
PROTECT保护,通过抛出ProtectedError异常,来阻止删除主表中被外键应用的数据
SET_NULL设置为NULL,仅在该字段null=True允许为null时可用
SET_DEFAULT设置为默认值,仅在该字段设置了默认值时可用
SET()设置为特定值或者调用特定方法
DO_NOTHING不做任何操作,如果数据库前置指明级联性,此选项会抛出IntegrityError异常

注意:我们在数据库中,设置外键的时候需要制定另一张表中关联的字段,但是在Django里并没有指定。这是因为Django会默认指定另外一张表的id作为关联字段。如下图所示:

在这里插入图片描述

可以看到peopleinfo这张表中的外键名称是book_id

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: Python Django模型详解

本文链接: https://www.lsjlt.com/news/137382.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python Django模型详解
    目录Django模型字段类型字段类型的参数外键总结Django模型 Django的模型定义在models.py文件中。模型是MVT中的M,也相当于MVC中的M。 在Django中,模...
    99+
    2022-11-12
  • Python Django ORM与模型详解
    目录一、 环境准备:1.docker环境2.安装mariadb数据库二、ORM1.ORM简介2.django配置数据库第一种方式:第二种方式:三、模型设计1.创建模型2.表关系四、模...
    99+
    2022-11-12
  • python-django 模型mode
    Django通过model不可以创建数据库,但可以创建数据库表,一下是创建表的字段以及表字段的参数。一、字段1、models.AutoField  自增列 = int(11)  如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自...
    99+
    2023-01-31
    模型 python django
  • Python Django模板系统详解
    目录设置模板路径模板变量引用静态文件总结设置模板路径 在django项目下创建templats文件来存放html文件 为了减少模板加载调用过程及模板本身的冗余代码,Django ...
    99+
    2022-11-12
  • Python Django 后台管理之后台模型属性详解
    目录十八、Django 后台模型属性篇18.1 在 admin 中注册模型18.2 Model.Admin 类提供的属性18.2.1 date_hierarchy18.2.2 act...
    99+
    2022-11-12
  • Python Django框架设计模式详解
    目录MVC设计模式MTV设计模式总结MVC设计模式 MVC (Model-View-Controller) 是软件工程中常用的软件架构模式,它是一种分离业务逻辑与显示界面的设计方法。...
    99+
    2022-11-12
  • Django—模型
    索引         1.定义模型类         2.模型类         3.字段查询         4.查询集         5.模型类关系         6.模型类扩展   ORM简介 ORM,全拼Object-Rela...
    99+
    2023-01-31
    模型 Django
  • django-7-django模型系统
    <<<常用的模型字段类型>>>https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types  InterField Char...
    99+
    2023-01-31
    模型 系统 django
  • Python django导出excel详解
    目录一、基础环境二、需求三、功能实现四、源码一、序化类实现二、手动转换外键实现总结django restframework 导入excel内容,可以查看另外一篇文章 一、基础环境 w...
    99+
    2022-11-12
  • Django框架模板用法详解
    目录一、模板应用实例二、Django 模板标签1、变量2、列表3、字典4、过滤器5、if/else 标签6、for 标签7、ifequal/ifnotequal 标签8、注释标签9、...
    99+
    2022-11-11
  • 详解Django的MVT设计模式
    目录经典的MVC设计模式及其优点Django是如何遵循MVC设计模式的?示例新建app并注册创建模型(M)编写视图并配置路由URL(V)编辑模板(T)小结经典的MVC设计模式...
    99+
    2022-11-12
  • Python随机森林模型实例详解
    本篇文章给大家带来了关于Python的相关知识,其中主要整理了随机森林模型的相关问题,包括了集成模型简介、随机森林模型基本原理、使用sklearn实现随机森林模型等等内容,下面一起来看一下,希望对大家有帮助。【相关推荐:Python3视频教...
    99+
    2022-07-01
    python
  • Django模块学习之模块语言详解
    目录前言1、变量2、注释3、过滤器4、标签:include5、标签:for6、标签:if总结前言 Django模块引擎支持Django模块语言(简称DTL)。DTL包含变量、注释、过...
    99+
    2022-11-12
  • python模型性能ROC和AUC分析详解
    目录正文1. ROC 曲线2. AUC 面积正文 本文将介绍模型性能分析的两个方法:ROC & AUC。 ROC 分析和曲线下面积 (AUC) 是数据科学中广泛使用的工具,...
    99+
    2023-03-22
    python模型性能ROC AUC python模型性能分析
  • python神经网络Xception模型复现详解
    目录什么是Xception模型Xception网络部分实现代码图片预测Xception是继Inception后提出的对Inception v3的另一种改进,学一学总是好的 什么是Xc...
    99+
    2022-11-11
  • python神经网络InceptionV3模型复现详解
    目录学习前言什么是InceptionV3模型InceptionV3网络部分实现代码图片预测学习前言 Inception系列的结构和其它的前向神经网络的结构不太一样,每一层的内容不是直...
    99+
    2022-11-11
  • python神经网络ShuffleNetV2模型复现详解
    目录什么是ShuffleNetV2ShuffleNetV21、所用模块2、网络整体结构网络实现代码什么是ShuffleNetV2 据说ShuffleNetV2比Mobilenet还要...
    99+
    2022-11-11
  • python神经网络Densenet模型复现详解
    目录什么是DensenetDensenet1、Densenet的整体结构2、DenseBlock3、Transition Layer网络实现代码什么是Densenet 据说Dense...
    99+
    2022-11-11
  • pytorch模型转onnx模型的方法详解
    目录学习目标学习大纲学习内容1 . pytorch 转 onnx2 . 运行onnx模型3.onnx模型输出与pytorch模型比对总结学习目标 1.掌握pytorch模型转换到on...
    99+
    2022-11-11
  • Python深度学习之Keras模型转换成ONNX模型流程详解
    目录从Keras转换成PB模型从PB模型转换成ONNX模型改变现有的ONNX模型精度部署ONNX 模型总结从Keras转换成PB模型 请注意,如果直接使用Keras2ONNX进行模型...
    99+
    2022-11-11
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作