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 相关文章推荐
Django的信号机制详解
May 05 Python
tensorflow实现逻辑回归模型
Sep 08 Python
python获取url的返回信息方法
Dec 17 Python
Python利用requests模块下载图片实例代码
Aug 12 Python
画pytorch模型图,以及参数计算的方法
Aug 17 Python
python自动分箱,计算woe,iv的实例代码
Nov 22 Python
python实现引用其他路径包里面的模块
Mar 09 Python
Python使用Numpy模块读取文件并绘制图片
May 13 Python
python numpy库np.percentile用法说明
Jun 08 Python
python爬虫用mongodb的理由
Jul 28 Python
python 实现IP子网计算
Feb 18 Python
Python测试框架pytest高阶用法全面详解
Jun 01 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
laravel自定义分页效果
2017/07/23 PHP
php取出数组单个值的方法
2018/03/12 PHP
jQuery EasyUI API 中文文档 - ComboTree组合树
2011/10/11 Javascript
jQuery动画出现连续触发、滞后反复执行的解决方法
2015/01/28 Javascript
JavaScript实现点击单元格改变背景色的方法
2016/02/12 Javascript
Angular JS数据的双向绑定详解及实例
2016/12/31 Javascript
Vue组件选项props实例详解
2017/08/18 Javascript
基于wordpress的ajax写法详解
2018/01/02 Javascript
jQuery中的类名选择器(.class)用法简单示例
2018/05/14 jQuery
微信小程序实现基于三元运算验证手机号/姓名功能示例
2019/01/19 Javascript
JavaScript实现省市联动效果
2019/11/22 Javascript
mpvue 项目初始化及实现授权登录的实现方法
2020/07/20 Javascript
[01:30:55]VG vs Mineski Supermajor 败者组 BO3 第三场 6.6
2018/06/07 DOTA
在Python下进行UDP网络编程的教程
2015/04/29 Python
编写Python脚本批量下载DesktopNexus壁纸的教程
2015/05/06 Python
Python科学画图代码分享
2017/11/29 Python
Pandas读取MySQL数据到DataFrame的方法
2018/07/25 Python
Python字符串逆序输出的实例讲解
2019/02/16 Python
python实现雪花飘落效果实例讲解
2019/06/18 Python
Python利用Scrapy框架爬取豆瓣电影示例
2020/01/17 Python
Django DRF路由与扩展功能的实现
2020/06/03 Python
Matplotlib中rcParams使用方法
2021/01/05 Python
pytorch下的unsqueeze和squeeze的用法说明
2021/02/06 Python
HTML5 embed标签定义和用法详解
2014/05/09 HTML / CSS
英国最大的女性服装零售商:Dorothy Perkins
2017/03/30 全球购物
Carrs Silver官网:英国著名的银器品牌
2020/08/29 全球购物
酒店拾金不昧表扬信
2014/01/18 职场文书
八一建军节部队活动方案
2014/02/04 职场文书
《只有一个地球》教学反思
2014/02/14 职场文书
2014年元旦联欢会活动策划方案
2014/02/16 职场文书
取保候审保证书
2014/04/30 职场文书
大学活动总结模板
2014/07/10 职场文书
建设工程授权委托书
2014/09/22 职场文书
2015年高中班主任工作总结
2015/04/30 职场文书
Python办公自动化之教你如何用Python将任意文件转为PDF格式
2021/06/28 Python
MySQL视图概念以及相关应用
2022/04/19 MySQL