django中ORM模型常用的字段的使用方法


Posted in Python onMarch 05, 2019

与数据类型相关的字段

CharField
        作用:字符串字段, 用于较短的字符串.
        参数:CharField 要求必须有一个参数 maxlength, 用于从数据库层和Django校验层限制该字段所允许的最大字符数.

IntegerField
       作用:用于保存一个整数.

CommaSeparatedIntegerField
        作用:用于存放逗号分隔的整数值. 类似 CharField, 必须要有maxlength参数.

FloatField
        作用:一个浮点数,必须提供两个参数:        
        参数:max_digits,总位数(不包括小数点和符号), decimal_places,小数位数.
        示例1:要保存最大值为 999 (小数点后保存2位),你要这样定义字段:
              models.FloatField(..., max_digits=5, decimal_places=2)
        示例2:要保存最大值一百万(小数点后保存10位)的话,你要这样定义: 
              models.FloatField(..., max_digits=19, decimal_places=10)
              admin 用一个文本框(<input type="text">)表示该字段保存的数据

与时间相关的字段

DateField
        一个日期字段. 共有下列额外的可选参数:
        Argument    描述
        auto_now    当对象被保存时,自动将该字段的值设置为当前时间.通常用于表示 "last-modified" 时间戳.
        auto_now_add    当对象首次被创建时,自动将该字段的值设置为当前时间.通常用于表示对象创建时间.
        (仅仅在admin中有意义...) 

DateTimeField
         一个日期时间字段. 类似 DateField 支持同样的附加选项.

与布尔值相关的字段

BooleanField
        A true/false field. admin用checkbox 来表示此类字段.

NullBooleanField
       类似 BooleanField, 不过允许 NULL 作为其中一个选项. 推荐使用这个字段而不要用 BooleanField 加 null=True 选项
       admin 用一个选择框 <select> (三个可选择的值: "Unknown", "Yes" 和 "No" ) 来表示这种字段数据.

与校验相关的字段

IPAddressField
        一个字符串形式的 IP 地址, (i.e. "24.124.1.30").

EmailField
        一个带有检查Email合法性的 CharField,不接受 maxlength 参数.

XMLField
        一个校验值是否为合法XML的 TextField,必须提供参数: schema_path, 它是一个用来校验文本的 RelaxNG schema #的文件系统路径.

与上传相关的字段

FileField
     作用:
          一个文件上传字段,要求一个必须有的参数
     参数:
          upload_to, 一个用于保存上载文件的本地文件系统路径. 这个路径必须包含 strftime #formatting,
          该格式将被上载文件的 date/time替换(so that uploaded files don't fill up the given directory).
     说明:
          admin 用一个<input type="file">部件表示该字段保存的数据(一个文件上传部件) .

ImageField
     作用: 类似FileField,不过要校验上传对象是否是一个合法图片.
     参数: 它有两个可选参数:height_field和width_field, 如果提供这两个参数, 则图片将按提供的高度和宽度规格保存.
注意事项:
     在一个model中使用FileField或ImageField需要以下步骤:
     (1)在你的settings文件中,定义一个完整路径给MEDIA_ROOT以便让Django在此处保存上传文件.
          (出于性能考虑,这些文件并不保存到数据库) 定义MEDIA_URL 作为该目录的公共 URL.要确保该目录对WEB服务器用户帐号是可写的.
     (2)在你的model中添加FileField或ImageField,并确保定义了upload_to选项,以告诉 Django使用MEDIA_ROOT的哪个子目录保存上传文件.
          你的数据库中要保存的只是文件的路径(相对于 MEDIA_ROOT).
          出于习惯你一定很想使用 Django 提供的 get_<#fieldname>_url 函数.
          举例来说,如果你的 ImageField叫作 mug_shot, 你就可以在模板中以 {{ object.#get_mug_shot_url }} 这样的方式得到图像的绝对路径.

不好分类的字段

AutoField
        一个 IntegerField, 添加记录时它会自动增长. 你通常不需要直接使用这个字段;
        自定义一个主键:my_id=models.AutoField(primary_key=True)
        如果你不指定主键的话,系统会自动添加一个主键字段到你的 model.

TextField
        一个容量很大的文本字段.
        admin 用一个 <textarea> (文本区域)表示该字段数据.(一个多行编辑框).

URLField
      作用: 用于保存 URL, 若verify_exists参数为True(默认), 给定的 URL 会预先检查是否存在( 即URL是否被有效装入且没有返回404响应).
      admin 用一个 <input type="text"> 文本框表示该字段保存的数据(一个单行编辑框)

FilePathField

模型常用属性

常用字段:

在 Django 中,定义了一些 Field 来与数据库表中的字段类型来进行映射。以下将介绍那些常用的字段类型。会出现与上面重叠介绍。

AutoField:
映射到数据库中是 int 类型,可以有自动增长的特性。一般不需要使用这个类型,如果不指定主键,那么模型会自动的生成一个叫做 id 的自动增长的主键。如果你想指定一个其他名字的并且具有自动增长的主键,使用 AutoField 也是可以的。

BigAutoField:
64位的整形,类似于 AutoField ,只不过是产生的数据的范围是从 1-9223372036854775807 。

BooleanField:
在模型层面接收的是 True/False 。在数据库层面是 tinyint 类型。如果没有指定默认值,默认值是 None 。

CharField:
在数据库层面是 varchar 类型。在 Python 层面就是普通的字符串。这个类型在使用的时候必须要指定最大的长度,也即必须要传递 max_length 这个关键字参数进去。

DateField:
日期类型。在 Python 中是 datetime.date 类型,可以记录年月日。在映射到数据库中也是 date 类型。使用这个 Field 可以传递以下几个参数:

  • auto_now :在每次这个数据保存的时候,都使用当前的时间。比如作为一个记录修改日期的字段,可以将这个属性设置为 True 。
  • auto_now_add :在每次数据第一次被添加进去的时候,都使用当前的时间。比如作为一个记录第一次入库的字段,可以将这个属性设置为 True 。

DateTimeField:
日期时间类型,类似于 DateField 。不仅仅可以存储日期,还可以存储时间。映射到数据库中是 datetime 类型。这个 Field 也可以使用 auto_now 和 auto_now_add 两个属性。

TimeField:
时间类型。在数据库中是 time 类型。在 Python 中是 datetime.time 类型。

EmailField:
类似于 CharField 。在数据库底层也是一个 varchar 类型。最大长度是254个字符。

FileField:
用来存储文件的。这个请参考后面的文件上传章节部分。

ImageField:
用来存储图片文件的。这个请参考后面的图片上传章节部分。

FloatField:
浮点类型。映射到数据库中是 float 类型。

IntegerField:
整形。值的区间是 -2147483648——2147483647 。

BigIntegerField:
大整形。值的区间是 -9223372036854775808——9223372036854775807 。

PositiveIntegerField:
正整形。值的区间是 0——2147483647 。

SmallIntegerField:
小整形。值的区间是 -32768——32767 。

PositiveSmallIntegerField:
正小整形。值的区间是 0——32767 。

TextField:
大量的文本类型。映射到数据库中是longtext类型。

UUIDField:
只能存储 uuid 格式的字符串。 uuid 是一个32位的全球唯一的字符串,一般用来作为主键。

URLField:
类似于 CharField ,只不过只能用来存储 url 格式的字符串。并且默认的 max_length 是200。

Field的常用参数:
null:如果设置为 True , Django 将会在映射表的时候指定是否为空。默认是为 False 。在使用字符串相关的 Field (CharField/TextField)的时候,官方推荐尽量不要使用这个参数,也就是保持默认值 False 。因为 Django 在处理字符串相关的 Field 的时候,即使这个 Field 的 null=False ,如果你没有给这个 Field 传递任何值,那么 Django 也会使用一个空的字符串 "" 来作为默认值存储进去。因此如果再使用 null=True , Django 会产生两种空值的情形(NULL或者空字符串)。如果想要在表单验证的时候允许这个字符串为空,那么建议使用 blank=True 。如果你的 Field 是 BooleanField ,那么对应的可空的字段则为 NullBooleanField 。

blank:标识这个字段在表单验证的时候是否可以为空。默认是False。这个和null是有区别的,null是一个纯数据库级别的。而blank是表单验证级别的。db_column:这个字段在数据库中的名字。如果没有设置这个参数,那么将会使用模型中属性的名字。default:默认值。可以为一个值,或者是一个函数,但是不支持lambda表达式。并且不支持列表/字典/集合等可变的数据结构。primary_key:是否为主键。默认是False。unique:在表中这个字段的值是否唯一。一般是设置手机号码/邮箱等。更多Field参数请参考官方文档: https://docs.djangoproject.com/zh-hans/2.0/ref/models/fields/ 模型中Meta配置:对于一些模型级别的配置。我们可以在模型中定义一个类,叫做Meta。然后在这个类中添加一些类属性来控制模型的作用。比如我们想要在数据库映射的时候使用自己指定的表名,而不是使用模型的名称。那么我们可以在Meta类中添加一个db_table的属性。示例代码如下:

class Book(models.Model):
 name = models.CharField(max_length=20,null=False)
 desc = models.CharField(max_length=100,name='description',db_column="description1")

 class Meta:
  db_table = 'book_model'

以下将对Meta类中的一些常用配置进行解释。db_table:这个模型映射到数据库中的表名。如果没有指定这个参数,那么在映射的时候将会使用模型名来作为默认的表名。ordering:设置在提取数据的排序方式。后面章节会讲到如何查找数据。比如我想在查找数据的时候根据添加的时间排序,那么示例代码如下:

class Book(models.Model):
 name = models.CharField(max_length=20,null=False)
 desc = models.CharField(max_length=100,name='description',db_column="description1")
 pub_date = models.DateTimeField(auto_now_add=True)

 class Meta:
  db_table = 'book_model'
  ordering = ['pub_date']

更多的配置后面会慢慢介绍到。 官方文档: https://docs.djangoproject.com/en/2.0/ref/models/options/

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python二分查找算法的递归实现方法
May 12 Python
Python 爬虫学习笔记之正则表达式
Sep 21 Python
python unittest实现api自动化测试
Apr 04 Python
PyCharm代码提示忽略大小写设置方法
Oct 28 Python
python 计算一个字符串中所有数字的和实例
Jun 11 Python
利用python实现汉字转拼音的2种方法
Aug 12 Python
python excel转换csv代码实例
Aug 26 Python
使用python实现男神女神颜值打分系统(推荐)
Oct 31 Python
wxpython布局的实现方法
Nov 01 Python
Python tkinter和exe打包的方法
Feb 05 Python
python GUI库图形界面开发之PyQt5下拉列表框控件QComboBox详细使用方法与实例
Feb 27 Python
Django框架配置mysql数据库实现过程
Apr 22 Python
两个元祖T1=('a', 'b'),T2=('c', 'd')使用匿名函数将其转变成[{'a': 'c'},{'b': 'd'}]的几种方法
Mar 05 #Python
python 堆和优先队列的使用详解
Mar 05 #Python
Python两个字典键同值相加的几种方法
Mar 05 #Python
详解python算法之冒泡排序
Mar 05 #Python
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
Mar 05 #Python
Python实现KNN(K-近邻)算法的示例代码
Mar 05 #Python
Python按钮的响应事件详解
Mar 04 #Python
You might like
实时抓取YAHOO股票报价的代码
2006/10/09 PHP
关于PHP开发的9条建议
2015/07/27 PHP
CI框架中$this-&gt;load-&gt;library()用法分析
2016/05/18 PHP
form自动提交实例讲解
2017/07/10 PHP
PHP echo()函数讲解
2019/02/15 PHP
php中array_fill函数的实例用法
2021/03/02 PHP
让div层随鼠标移动的实现代码 ie ff
2009/12/18 Javascript
js中有关IE版本检测
2012/01/04 Javascript
jquery监听div内容的变化具体实现思路
2013/11/04 Javascript
JSON格式化输出
2014/11/10 Javascript
功能强大的Bootstrap效果展示(二)
2016/08/03 Javascript
jQuery、zepto、js常用小技巧
2017/02/12 Javascript
简单实现jQuery手风琴效果
2017/08/18 jQuery
解决vue 按钮多次点击重复提交数据问题
2018/05/10 Javascript
利用chrome浏览器进行js调试并找出元素绑定的点击事件详解
2021/01/30 Javascript
如何使用electron-builder及electron-updater给项目配置自动更新
2018/12/24 Javascript
详解JSON和JSONP劫持以及解决方法
2019/03/08 Javascript
微信小程序位置授权处理方法
2019/06/13 Javascript
vue中使用rem布局代码详解
2019/10/30 Javascript
vue实现登录功能
2020/12/31 Vue.js
[02:25]DOTA2英雄基础教程 虚空假面
2014/01/02 DOTA
[47:43]Alliance vs KG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
Python记录详细调用堆栈日志的方法
2015/05/05 Python
Python输出汉字字库及将文字转换为图片的方法
2016/06/04 Python
有趣的python小程序分享
2017/12/05 Python
Python+matplotlib实现计算两个信号的交叉谱密度实例
2018/01/08 Python
Python中捕获键盘的方式详解
2019/03/28 Python
Python3分析处理声音数据的例子
2019/08/27 Python
Manjaro、pip、conda更换国内源的方法
2020/11/17 Python
意大利大型购物中心:Oliviero.it
2017/10/19 全球购物
德国BA保镖药房中文网:Bodyguard Apotheke
2021/03/09 全球购物
影视动画专业个人的自我评价
2013/12/31 职场文书
保密普查工作实施方案
2014/02/25 职场文书
歌唱比赛主持词
2014/03/18 职场文书
对学校的意见和建议
2015/06/04 职场文书
2019毕业典礼主持词!
2019/07/05 职场文书