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中的tkinter模块作图的方法
Feb 07 Python
Python tkinter事件高级用法实例
Jan 31 Python
使用python编写udp协议的ping程序方法
Apr 22 Python
django反向解析URL和URL命名空间的方法
Jun 05 Python
python实现旋转和水平翻转的方法
Oct 25 Python
python使用原始套接字发送二层包(链路层帧)的方法
Jul 22 Python
在Python中实现函数重载的示例代码
Dec 12 Python
pytorch如何冻结某层参数的实现
Jan 10 Python
python实现在内存中读写str和二进制数据代码
Apr 24 Python
Python pip install之SSL异常处理操作
Sep 03 Python
python - timeit 时间模块
Apr 06 Python
python 调用js的四种方式
Apr 11 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
人族 Terran 魔法与科技
2020/03/14 星际争霸
PHPMailer安装方法及简单实例
2008/11/25 PHP
php生成excel文件的简单方法
2014/02/08 PHP
Opcache导致php-fpm崩溃nginx返回502
2015/03/02 PHP
CI框架实现cookie登陆的方法详解
2016/05/18 PHP
php文件类型MIME对照表(比较全)
2016/10/07 PHP
Yii CDBCriteria常用方法实例小结
2017/01/19 PHP
自己使用jquery写的一个无缝滚动的插件
2014/04/30 Javascript
jQuery调用ajax请求的常见方法汇总
2015/03/24 Javascript
javascript创建函数的20种方式汇总
2015/06/23 Javascript
三分钟带你玩转jQuery.noConflict()
2016/02/15 Javascript
基于JavaScript实现快速转换文本语言(繁体中文和简体中文)
2016/03/07 Javascript
前端性能优化及技巧
2016/05/06 Javascript
图片懒加载插件实例分享(含解析)
2017/01/09 Javascript
Angular之指令Directive用法详解
2017/03/01 Javascript
layui文件上传实现代码
2017/05/20 Javascript
AngularJS 打开新的标签页实现代码
2017/09/07 Javascript
JavaScript深入V8引擎以及编写优化代码的5个技巧
2019/06/24 Javascript
Vue 打包的静态文件不能直接运行的原因及解决办法
2020/11/19 Vue.js
react中hook介绍以及使用教程
2020/12/11 Javascript
浅析Python中元祖、列表和字典的区别
2016/08/17 Python
Django框架登录加上验证码校验实现验证功能示例
2019/05/23 Python
Python生成一个迭代器的实操方法
2019/06/18 Python
django框架实现一次性上传多个文件功能示例【批量上传】
2019/06/19 Python
Python从文件中读取指定的行以及在文件指定位置写入
2019/09/06 Python
Python中常见的数制转换有哪些
2020/05/27 Python
会计找工作求职信范文
2013/12/09 职场文书
军训自我鉴定
2014/01/22 职场文书
80后职场人的职业生涯规划
2014/03/08 职场文书
化妆品活动策划方案
2014/05/23 职场文书
医院护士工作检讨书
2014/10/26 职场文书
2014年医德医风工作总结
2014/11/13 职场文书
抄袭同学作业检讨书1000字
2014/11/20 职场文书
如何写辞职书
2015/02/26 职场文书
golang 比较浮点数的大小方式
2021/05/02 Golang
MySQL 外键约束和表关系相关总结
2021/06/20 MySQL