使用Django定义模型类字段时常用字段详解-程序员宅基地

技术标签: django  

首先要知道的是在定义好下述字段之后要在终端输入这两行命令执行迁移生成表喔~

python .\manage.py makemigrations
python .\manage.py migrate

1.models.CharField()

是django中最常见的字段, 用于存储字符串类型的数据

适用于定义名字/电话/地址/国家等等

  name = models.CharField(verbose_name='联系人', max_length=20)
2.models.TextField()

同样是django中的用于存储字符串类型的数据, 既然同是存储数据,那和CharField()有没有区别呢?

答案当然是有的啦~

A. 最大长度:CharField需要指定一个最大长度(max_length),用于定义数据库字段的长度。这是必需的。相反,TextField不需要最大长度参数。

B. 存储和检索效率:通常,如果你知道文本数据的长度将在一个相对较小的范围内,那么使用CharField可能更有效,因为数据库可以优化固定长度的字段的存储和检索。如果你需要存储大量的文本,如文章或评论,那么TextField可能更合适。

C. 用途:CharField通常用于较短的字符串,如名称、标题、城市等,而TextField通常用于较长或无限制长度的字符串,如博客文章、评论、描述等。

D. 表单渲染:在Django的表单中,CharField通常呈现为<input type="text">,而TextField呈现为<textarea>。这对用户输入数据的方式有很大影响

3.models.AutoField()

AutoField()的作用是默认生成列名为id的列,并设置为主键,常用于定义用户id,因为作为主键所以primary_key也成了他的必备参数,定义时切记不可忘记传入此参数。

当然主键django会默认自带

user_id = models.AutoField(primary_key = True)
4.models.BooleanField()

顾名思义,BooleanField()是django中的布尔类型字段, 常用于定义一个物品或者信息的状态。

例如商品是否被选中, 填写的地址电话号码是否为默认状态。

is_default = models.BooleanField(verbose_name='是否为默认地址', default=False)
5.models.DateField()

DateField()是django中的日期类型的字段

他与python里的datetime.date实例相同 不包含具体的时分秒 以天为单位计算时间。

值得注意的是他的两个参数:

参数1: auto_now,默认值为false,设置为true时,每次执行 save 操作时,将其值设置为当前时间,并且每次修改model,都会自动更新。

使用场景: 这个参数在需要存储“最后修改时间”的场景下,十分方便。 注意: 设置该参数为true时,并不意味着字段的默认值设为当前时间,而是指字段会被“强制”更新到当前时间,你无法程序中手动为字段赋值;如果使用django自带的admin管理器,那么该字段在admin中是只读的。

参数2: auto_now_add,默认值为false,设置为true时,会在model对象第一次被创建时,将字段的值设置为创建时的时间,以后修改对象时,字段的值不会再更新。 使用场景: 该属性通常被用在存储“创建时间”的场景下。 注意: 一旦被设置为True,就无法在程序中手动为字段赋值,在admin中字段也会成为只读的。 auto_now和auto_now_add被设置为True后,这样做会导致字段成为editable=False和blank=True的状态。editable=False将导致字段不会被呈现在admin中,blank=Ture表示允许在表单中不输入值。

creat_time = models.DateField(auto_now_add=True, verbose_name='用户创建时间')
6.models.DateTimeField()

DateTimeField()是django中的日期+时间类型的字段

他的参数特性与DateField()相同,区别就是他会多出一个时间参数,更加具体。

因此就导致了他们使用场景的不同。

好比DateField()常用于定义用户创建时间,而DateTimeField()就常用于定义好比验证码生成的时间,因为验证码进行操作的时候几乎都是以秒或者分钟为单位,这个时候就用到了DateTimeField()

code_creat_time = models.DateField(auto_now_add=True, verbose_name='验证码生成时间')
7.models.DecimalField()

django中的十进制小数类型字段

# 必备参数:最大位数max_digits = 10 和小数位decimal_places = 2

常用于定义商品价格

price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='商品价格')

8.models.EmailField()

django中的电子邮箱字段 必须是email类型的数据

email = models.EmailField()

9.models.FloatField()

浮点类型字段,和DecimalField()类似,应用时要规定他的最大位数和小数位

数据类型为 float

floatNum = models.FloatField(max_digits = 10,decimal_places = 2)

10.models.IntegerField()

整数类型字段

数据类型为 int

intNum = models.IntegerField()

11.models.IPAddressField()

django中的IP字段,同EmailField类似。他存储的必须是IP类型的数据

Django Admin以及ModelForm中提供验证 IPV4 机制

IP = models.IPAddressField()

12.models.GenericIPAddressField()

与IPAddressField(),但是他的字段存储类型是可供选择的,它会根据必备参数:protocol (both,ipv4,ipv6)中的参数判断。

IP = models.GenericIPAddressField(protocol = both)

13.models.SlugField()

django中存储字符串类型的字段,但是字段必须包含减号、下划线、字母、数字,适用于复杂密码的定义

hardPassword = models.SlugField()

14.models.URLField()

django中存储url链接类型的字段,相似于IPAddressField(),保存字段必须为url类型

url = models.URLField()

15.models.ImageField()

django中图片类型的字段 作用是将图片保存为图片地址的形式,应用较为广泛。

image = models.ImageField()

16.models.FilePathField()

文件地址类型的字段,可以根据地址选择匹配文件。

必备的参数是path(文件的绝对路径)

file = models.FilePathField(path='绝对路径')

17.models.FileField()

文件上传功能字段

必备的参数是upload_to(文件的绝对路径)

file = models.FileField(upload_to='绝对路径')

18.models.PhoneNumberField()

11位电话号码字段

与CharField()添加了校验电话号码的功能,不过再目前的开发当中,电话号码的校验逻辑并不复杂,开发者大可以通过正则匹配在相应的视图函数中去校验手机号码,所以字段的使用也就较少了。

phone = models.PhoneNumberField()
19.总结

相信大家再掌握以上字段并熟悉他们的相关参数以后对定义模型类字段的书写就已经并不会感到困难了,但是实际开发中我们还是需要根据实际情况去进行变通。

例如我们在开发一个比较大的项目当中,可能不同的模型类中会出现多个相同的字段,届时我们就可以定义一个抽象类公共的字段,然后让不同的模型去继承它。(值得注意的是,抽象模型在执行迁移文件的时候是不会在数据库中生成表的)

当然相对于十分常见的字段,django也在AbstractUser中提供,我们也可以直接继承。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_74452504/article/details/135868236

智能推荐

海康威视网络摄像头开发流程(五)------- 直播页面测试_ezuikit 测试的url-程序员宅基地

文章浏览阅读3.8k次。1、将下载好的萤石js插件,添加到SoringBoot项目中。位置可参考下图所示。(容易出错的地方,在将js插件在html页面引入时,发生路径错误的问题)所以如果对页面中引入js的路径不清楚,可参考下图所示存放路径。2、将ezuikit.js引入到demo-live.html中。(可直接将如下代码复制到你创建的html页面中)<!DOCTYPE html><html lan..._ezuikit 测试的url

如何确定组态王与多动能RTU的通信方式_组态王ua-程序员宅基地

文章浏览阅读322次。第二步,在弹出的对话框选择,设备驱动—>PLC—>莫迪康—>ModbusRTU—>COM,根据配置软件选择的协议选期期,这里以此为例,然后点击“下一步”。第四步,把使用虚拟串口打勾(GPRS设备),根据需要选择要生成虚拟口,这里以选择KVCOM1为例,然后点击“下一步”设备ID即Modbus地址(1-255) 使用DTU时,为下485接口上的设备地址。第六步,Modbus的从机地址,与配置软件相同,这里以1为例,点击“下一步“第五步,Modbus的从机地址,与配置软件相同,这里以1为例,点击“下一步“_组态王ua

npm超详细安装(包括配置环境变量)!!!npm安装教程(node.js安装教程)_npm安装配置-程序员宅基地

文章浏览阅读9.4k次,点赞22次,收藏19次。安装npm相当于安装node.js,Node.js已自带npm,安装Node.js时会一起安装,npm的作用就是对Node.js依赖的包进行管理,也可以理解为用来安装/卸载Node.js需要装的东西_npm安装配置

火车头采集器AI伪原创【php源码】-程序员宅基地

文章浏览阅读748次,点赞21次,收藏26次。大家好,小编来为大家解答以下问题,python基础训练100题,python入门100例题,现在让我们一起来看看吧!宝子们还在新手村练级的时候,不单要吸入基础知识,夯实自己的理论基础,还要去实际操作练练手啊!由于文章篇幅限制,不可能将100道题全部呈现在此除了这些,下面还有我整理好的基础入门学习资料,视频和讲解文案都很齐全,用来入门绝对靠谱,需要的自提。保证100%免费这不,贴心的我爆肝给大家整理了这份今天给大家分享100道Python练习题。大家一定要给我三连啊~

Linux Ubuntu 安装 Sublime Text (无法使用 wget 命令,使用安装包下载)_ubuntu 安装sumlime text打不开-程序员宅基地

文章浏览阅读1k次。 为了在 Linux ( Ubuntu) 上安装sublime,一般大家都会选择常见的教程或是 sublime 官网教程,然而在国内这种方法可能失效。为此,需要用安装包安装。以下就是使用官网安装包安装的教程。打开 sublime 官网后,点击右上角 download, 或是直接访问点击打开链接,即可看到各个平台上的安装包。选择 Linux 64 位版并下载。下载后,打开终端,进入安装..._ubuntu 安装sumlime text打不开

CrossOver for Mac 2024无需安装 Windows 即可以在 Mac 上运行游戏 Mac运行exe程序和游戏 CrossOver虚拟机 crossover运行免安装游戏包-程序员宅基地

文章浏览阅读563次,点赞13次,收藏6次。CrossOver24是一款类虚拟机软件,专为macOS和Linux用户设计。它的核心技术是Wine,这是一种在Linux和macOS等非Windows操作系统上运行Windows应用程序的开源软件。通过CrossOver24,用户可以在不购买Windows授权或使用传统虚拟机的情况下,直接在Mac或Linux系统上运行Windows软件和游戏。该软件还提供了丰富的功能,如自动配置、无缝集成和实时传输等,以实现高效的跨平台操作体验。

随便推点

一个用聊天的方式让ChatGPT写的线程安全的环形List_为什么gpt一写list就卡-程序员宅基地

文章浏览阅读1.7k次。一个用聊天的方式让ChatGPT帮我写的线程安全的环形List_为什么gpt一写list就卡

Tomcat自带的设置编码Filter-程序员宅基地

文章浏览阅读336次。我们在前面的文章里曾写过Web应用中乱码产生的原因和处理方式,旧文回顾:深度揭秘乱码问题背后的原因及解决方式其中我们提到可以通过Filter的方式来设置请求和响应的encoding,来解..._filterconfig selectencoding

javascript中encodeURI和decodeURI方法使用介绍_js encodeur decodeurl-程序员宅基地

文章浏览阅读651次。转自:http://www.jb51.net/article/36480.htmencodeURI和decodeURI是成对来使用的,因为浏览器的地址栏有中文字符的话,可以会出现不可预期的错误,所以可以encodeURI把非英文字符转化为英文编码,decodeURI可以用来把字符还原回来_js encodeur decodeurl

Android开发——打包apk遇到The destination folder does not exist or is not writeable-程序员宅基地

文章浏览阅读1.9w次,点赞6次,收藏3次。前言在日常的Android开发当中,我们肯定要打包apk。但是今天我打包的时候遇到一个很奇怪的问题Android The destination folder does not exist or is not writeable,大意是目标文件夹不存在或不可写。出现问题的原因以及解决办法上面有说报错的中文大意是:目标文件夹不存在或不可写。其实问题就在我们的打包界面当中图中标红的Desti..._the destination folder does not exist or is not writeable

Eclipse配置高大上环境-程序员宅基地

文章浏览阅读94次。一、配置代码编辑区的样式 <1>打开Eclipse,Help —> Install NewSoftware,界面如下: <2>点击add...,按下图所示操作: name:随意填写,Location:http://eclipse-color-th..._ecplise高大上设置

Linux安装MySQL-5.6.24-1.linux_glibc2.5.x86_64.rpm-bundle.tar_linux mysql 安装 mysql-5.6.24-1.linux_glibc2.5.x86_6-程序员宅基地

文章浏览阅读2.8k次。一,下载mysql:http://dev.mysql.com/downloads/mysql/; 打开页面之后,在Select Platform:下选择linux Generic,如果没有出现Linux的选项,请换一个浏览器试试。我用的谷歌版本不可以,换一个别的浏览器就行了,如果还是不行,需要换一个翻墙的浏览器。 二,下载完后解压缩并放到安装文件夹下: 1、MySQL-client-5.6.2_linux mysql 安装 mysql-5.6.24-1.linux_glibc2.5.x86_64.rpm-bundle