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中datetime模块参考手册
Jan 13 Python
django实现前后台交互实例
Aug 07 Python
Python数据类型之列表和元组的方法实例详解
Jul 08 Python
python中selenium操作下拉滚动条的几种方法汇总
Jul 14 Python
python实现桌面托盘气泡提示
Jul 29 Python
python根据多个文件名批量查找文件
Aug 13 Python
Matplotlib绘制雷达图和三维图的示例代码
Jan 07 Python
python实现门限回归方式
Feb 29 Python
Python实现在线批量美颜功能过程解析
Jun 10 Python
keras和tensorflow使用fit_generator 批次训练操作
Jul 03 Python
Flask缓存静态文件的具体方法
Aug 02 Python
python 使用三引号时容易犯的小错误
Oct 21 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
一次编写,随处运行
2006/10/09 PHP
表单复选框向PHP传输数据的代码
2007/11/13 PHP
phplock(php进程锁) v1.0 beta1
2009/11/24 PHP
php结合正则批量抓取网页中邮箱地址
2015/05/19 PHP
适用于初学者的简易PHP文件上传类
2015/10/29 PHP
PHP7标量类型declare用法实例分析
2016/09/26 PHP
php模式设计之观察者模式应用实例分析
2019/09/25 PHP
php实现银联商务公众号+服务窗支付的示例代码
2019/10/12 PHP
JS request函数 用来获取url参数
2010/05/17 Javascript
javascript客户端解决方案 缓存提供程序
2010/07/14 Javascript
JS 弹出层 定位至屏幕居中示例
2014/05/21 Javascript
JS模仿编辑器实时改变文本框宽度和高度大小的方法
2015/08/17 Javascript
基于jQuery实现响应式圆形图片轮播特效
2015/11/25 Javascript
DeviceOne 让你一见钟情的App快速开发平台
2016/02/17 Javascript
NodeJs测试框架Mocha的安装与使用
2017/03/28 NodeJs
JavaScript实现无穷滚动加载数据
2017/05/06 Javascript
在iframe中使bootstrap的模态框在父页面弹出问题
2017/08/07 Javascript
JS面向对象编程基础篇(一) 对象和构造函数实例详解
2020/03/03 Javascript
Vue-cli打包后如何本地查看的操作
2020/09/02 Javascript
python实现井字棋游戏
2020/03/30 Python
Python读取图片属性信息的实现方法
2016/09/11 Python
python3第三方爬虫库BeautifulSoup4安装教程
2018/06/19 Python
python 字典操作提取key,value的方法
2019/06/26 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
2019/10/12 Python
Python 炫技操作之合并字典的七种方法
2020/04/10 Python
高三生物教学反思
2014/01/25 职场文书
创业计划实施的7大步骤
2014/02/05 职场文书
交通事故协议书
2014/04/15 职场文书
全国优秀辅导员事迹材料
2014/05/14 职场文书
局火灾防控工作方案
2014/05/25 职场文书
幼儿园个人师德总结
2015/02/06 职场文书
客房服务员岗位职责
2015/02/09 职场文书
医院员工辞职信范文
2015/05/12 职场文书
阳光体育运动标语口号
2015/12/26 职场文书
PyQt5结合QtDesigner实现文本框读写操作
2021/06/11 Python
JS的深浅复制详细
2021/10/16 Javascript