django开发之model篇-Field类型讲解
今天介绍一下django开发中,定义模型时用到的相关字段类型和字段选项。
先说说常用的字段类型:
1) AutoField: 自增字段类型,当自定义自增类型的id时,可以使用此类型;
2) BigAutoField: 64位的整数自增类型;
3) BigIntegerField: 64位的整数类类型;
4) BinrayField: 字节类型的二进制数据;
5) BooleanField: 布尔类型;
6) CharField: 字符串类型,使用时必须指定max_lenth这个参数;
7) DateField: 日期类型,在python中datetime.date的实例就相当于该类型。该类型有两个字段选项auto_now和auto_now_add需要说一下。在django官方文档中的说明中,auto_now表示当对象被保存后,该字段会自动设置为当前时间,适用于需要保存对象的最后修改时间的场景。auto_now_add表示当对象第一次被创建后,该字段会自动设置为当前时间,适用于保存对象创建时间的场景。
8) DateTimeField: 时间类型,在python中datetime.datetime的实例就相当于该类型。同样的,这个字段中也有auto_now和aito_now_add这两个参数;
9) TimeField: 时间类型,python中datetime.time的实例可以表示此类型,
10) DecimalField: 数字类型,python中的Decimal实例就相当于此类型。有两个必须的参数,max_digits表示数字整数部分和小数部
分共有多少位,decimal_places表示精度,即小数部分的位数
test_decimal = models.DecimalField(max_digits=5, decimal_places=2) # 3位整数,2位小数
11) DurationField: 存储时间段的类型,即表示两个时间的差值,在python中可以用timedelta表示;
12) EmailField: 一个字符串,但是会使用EmailValidator验证form中输入的字符串是否符合邮件的格式;
13) FileField: 文件上传类型的字段,必须要有upload_to这个参数,上传的文件会保存在upload_to指定的路径中
test_file1 = models.FileField(upload_to='uploads/') # 上传的文件保存到uploads中
test_file2 = models.FileField(upload_to='uploads/%Y/%m/%d') # 上传的文件保存到uploads/2018/08/18中
其中,upload_to的值还可以是一个回调函数:
def func_file(instance, filename):
return 'user_{0}/{1}'.format(instance.user.id, filename) test_file3 = models.FileField(upload_to=func_file)
14) ImageField: 图片类型的字段,可以用在使用头像的场景中;与FileField一样,它也有upload_to参数,需要指定一个上传的路径。使用该字段时,项目中需要安装Pillow库。ImageField的实例是作为varchar类型保存到数据库中的,默认字符串的最大长度是100,但是可以使用max_length参数指定最大长度。
15) TextField: 文本类型的字段,对于超出CharField类型存储范围的数据,可以定义为该类型;
16) UUIDField: 使用python中UUID类生成该字段的值,生成一个通用唯一的标识符,该类型可以代替自增id做主键
user_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
其中,default参数可以指定,uuid4是uuid的一个版本,即uuid的生成方式,还有其它的版本。
17) FloatField: 浮点类型,用python中的float实例表示;
18) IntegerField: 整数类型。
下面说说常用的字段选项:
1)default: 该参数可以指定字段的默认值,一般直接指定默认值即可;但是,该参数的值还可以是一个函数名,可用于订单号等特殊字符串的生成;用法如下:
def generate_order_id():
""" 此处可以编写生成订单号的逻辑 """
...... order_id = models.CharField(max_length=32, default=generate_order_id)
通过以上代码,每创建模型中的一条数据时,order_id就会根据你编写的逻辑自动生成,这样大大增加了字段值的灵活性;
2)primary_key: 如果参数值为True,表示指定该字段是主键;当模型中没有使用这个参数时,django会自动添加一个int型的自增id作为主键;
3)null: 如果参数值为True,该字段在数据库中的值是NULL,该参数默认值是False;
4)blank: 如果参数值是True,表示这个字段值在前端页面的表单中允许填空值,注意与null的区别;
5)auto_now和auto_now_add在上面讲解过,这里不再说明了;
6)choices: 该参数的值是一个可迭代的对象,看一下例子:
class UserModel(models.Model):
user_type = (
(1, "中学生"),
(2, "大学生"),
(3, "研究生"),
)
user_type = models.IntegerField(choices=user_type)
上面的代码中,choices的值是一个元祖(当然也可以是列表),在数据库中存储的形式是1、2、3,但是在前端表单中显示的结果是中学生、大学生、研究生;一些表示类型、爱好等具有分类意义的字段时可以使用这个参数;
7)help_text: 显示在页面表单中的一段说明性文字,可以用于对该字段的解释说明;
8)verbose_name: 给字段指定一个更详细的名字;ForeignKey、ManyToManyField 和OneToOneField,字段默认的verbose_name值就是字段的名称,如果显式指定,只需写在第一个位置即可,如:
user = models.CharField("user_name", max_length=32)
user字段的verbose_name就是user_name;
当字段是ForeignKey、ManyToManyField或者OneToOneField类型时,想使用这个参数必须加上verbose_name,如:
user = models.ForeignKey(UserModel, to_field="user_id", verbose_name="user_name")
因为当字段是ForeignKey、ManyToManyField或者OneToOneField这三种类型时,第一个参数必须是关联的模型类;
9)unique: 如果值该参数为True,则数据库中这个字段的值必须唯一,且不能为空;
10)db_index: 如果该字段值为True,则在数据库中,将会在该字段上创建索引。
关于Field的字段类型和参数就先讲到这里。如果错误之处,欢迎交流指正!
原文地址:https://segmentfault.com/a/1190000016151866
django开发之model篇-Field类型讲解的更多相关文章
- 高效开发之SASS篇 灵异留白事件——图片下方无故留白 你会用::before、::after吗 link 与 @import之对比 学习前端前必知的——HTTP协议详解 深入了解——CSS3新增属性 菜鸟进阶——grunt $(#form :input)与$(#form input)的区别
高效开发之SASS篇 作为通往前端大神之路的普通的一只学鸟,最近接触了一样稍微高逼格一点的神器,特与大家分享~ 他是谁? 作为前端开发人员,你肯定对css很熟悉,但是你知道css可以自定义吗?大家 ...
- Mobile开发之meta篇
Mobile开发之meta篇 <meta name="viewport" content="width=device-width, initial-scale=1, ...
- Django开发之Datetime类型JSON序列化时报错
前提回顾 在进行django开发view视图时,如果数据库字段是 datetime类型,在JSON序列化返回时,会出现异常 异常现象 TypeError: Object of type datetim ...
- 前端开发之JavaScript篇
一.JavaScript介绍 前端三剑客之JavaScript,简称js,可能是这三个里面最难的一个了.很早以前,市面上流通着三种js版本,为了统一,ECMA(欧洲计算机制造协会)定义了规范的版本, ...
- 前端开发之css篇
一.css简介 css(Cascading Style Sheets)层叠样式表,是一种为html文档添加样式的语言,主要有两个功能:渲染和布局.使用css主要关注两个点:查找到标签,属性操作 二.c ...
- Django开发之module
1.首先需要安装你要使用的数据的python模块组件 2.需要新建一个app 切换到工程根目录下,然后执行django-admin.py startpapp firstModule 编辑first/s ...
- Django开发之ORM批量操作
版本 1 Python 3.8.2 2 Django 3.0.6 批量入库 场景: 前端页面通过 textarea 文本框提交一列多行数据到Django后台,后台通过ORM做入库操作 表名: Tabl ...
- AspectJ的XML方式完成AOP的开发之AOP的通知类型
1. 前置通知 * 在目标类的方法执行之前执行. * 配置文件信息:<aop:after method="before" pointcut-ref="myPoint ...
- AndroidWear开发之HelloWorld篇
通过前一篇的学习,我们把环境都搭建好了,这下我们就可以正真的开发了. 一.创建Wear项目 通过项目创建向导一步一步下去就可以创建好一个Wear项目: 1.新建项目,一次填入应用名字,应用包名,项目位 ...
随机推荐
- CodeForces - 603A-Alternative Thinking (思维题)
Kevin has just recevied his disappointing results on the USA Identification of Cows Olympiad (USAICO ...
- Hdu1015&&寒假作业第二组I题
题意是A-Z对应1-26,然后给个目标数字和字符串,看看字符串里的某5个字符的组合能不能使v - w^2 + x^3 - y^4 + z^5 = target等式成立,其实多写几个循环也可以达到目的, ...
- 前端CSS(3)
前端基础CSS(3) 一.文本属性和字体属性(常用的) 1.文本属性 text-align:left|right|center|justify(两端对齐,只适用于英文); /*对齐方式*/ c ...
- Web自动化测试—PO设计模式(一)
前言 很多的测试同学懂得使用selenium进行Web自动化测试, 但是不知道如何去写一个测试框架,或者说是一个容易维护的web自动化项目. 自己写一个最基本的web自动化测试框架需要会什么? 1. ...
- C# 序列化与反序列化json
与合作伙伴讨论问题,说到的c++与c#数据的转换调用,正好就说到了序列化与反序列化,同样也可用于不同语言间的调用,做了基础示例,作以下整理: using System.Data; using Syst ...
- (转)企业配置sudo命令用户行为日志审计
原文:https://www.cnblogs.com/Csir/p/6403830.html?utm_source=itdadao&utm_medium=referral 第15章 企业配置s ...
- Spark Mllib里决策树回归分析使用.rootMeanSquaredError方法计算出以RMSE来评估模型的准确率(图文详解)
不多说,直接上干货! Spark Mllib里决策树二元分类使用.areaUnderROC方法计算出以AUC来评估模型的准确率和决策树多元分类使用.precision方法以precision来评估模型 ...
- jquery自定义组件开发
jquery的组件已经有很多,但是有可能找不到符合我们需求的组件,所以我们可以动手自己封装一个jquery组件. 第一步要知道封装jquery组件的基本语法 (function ($) { $.fn. ...
- springboot 学习笔记(三)
(三)用jar包启动springboot项目 1.首先需要在pom文件中添加依赖,spring-boot-starter-parent包含有打包的默认配置,如果要修改的话要可以进行重新定义,具体内容参 ...
- Python+selenium之unittest单元测试(3)关于测试用例执行的顺序
一.测试用例执行的顺序 用例的执行顺序涉及多个层级,在多个测试目录的情况下,先执行哪个目录?在多个测试文件的情况下,先执行哪个文件?在多个测试类的情况下,先执行哪个测试类?,在多个测试方法(用例)的情 ...