1. 定义属性

Django根据属性的类型确定以下信息:

  • 当前选择的数据库支持字段的类型
  • 渲染管理表单时使用的默认html控件
  • 在管理站点最低限度的验证

django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列。

默认创建的主键列属性为id,可以使用pk代替,pk全拼为primary key。

pk是主键的别名,若主键名为id2,那么pk是id2的别名。

属性命名限制:

  • 不能是python的保留关键字。
  • 不允许使用连续的下划线,这是由django的查询方式决定的,在第4节会详细讲解查询。
  • 定义属性时需要指定字段类型,通过字段类型的参数指定选项。

前面已经简单的使用过了,只是没有详细介绍,语法:

属性=models.字段类型(选项)

1.1 字段类型

(1) AutoField

自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性。

自定义一个主键:

my_id=models.AutoField(primary_key=True)

(2) BooleanField

布尔字段,值为True或False。

(3) NullBooleanField

类似BooleanField,支持Null、True、False三种值。

(4) CharField(max_length=字符长度)

字符串。

参数max_length表示最大字符个数。

(5) TextField

大文本字段,一般超过4000个字符时使用。

(6) IntegerField

整数。

(7) DecimalField(max_digits=None, decimal_places=None)

十进制浮点数。

参数max_digits表示总位数。

参数decimal_places表示小数位数。

(8) FloatField

浮点数。

(9) DateField[auto_now=False, auto_now_add=False])

日期。

参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为false。

参数auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为false。

参数auto_now_add和auto_now是相互排斥的,组合将会发生错误。

(10) TimeField

时间,参数同DateField。

(11) DateTimeField

日期时间,参数同DateField。

(12) FileField

上传文件字段。

参数:upload_to,一个用于保存上传文件的本地文件系统路径。

(13) ImageField

继承于FileField,对上传的内容进行校验,确保是有效的图片。

有两个可选参数:height_field和width_field。将图片按照提供的高度和宽度规格保存。

(14) CommaSeparatedIntegerField(max_length)

逗号分隔开的整数字段。

参数与CharField一样。

(15) FilePathField(path,[match],[recursive])

拥有多个可选项的字段,选项被限定为文件系统中某个目录下的文件名。

(16) EmailField

能检查值是否是有效的电子邮件地址的CharField。

(17) IPAddressField

IP地址,以字符串格式表示。

例如:"192.168.0.1"

(18) PhoneNumberField

检查值是否是一个合法的美式电话格式。

(19) PositiveIntegerField

和IntegerField类似,但是必须是正值。

(20) SlugField

内容简短的标签,这段内容只能包含字母、数字、下划线或连字符。通常用于URL中。

(21) SmallIntegerField

和IntegerField类似,但是只允许在一个数据库相关的范围内的数值(通常是-32,768到+32,767)

(22) URLField

用来存储URL的字段。

(23) USStateField

美国州名字缩写,两个字母。

(24) XMLField(schema_path)

类似TextField,只不过要检查值是否匹配指定schema的合法XML。

1.2 选项

通过选项实现对字段的约束。

null:如果为True,表示允许为空,默认值是False。

blank:如果为True,则该字段允许为空白,默认值是False。

要注意,这与 null 不同。null纯粹是数据库范畴的,而blank是数据验证范畴的。

如果一个字段的blank=True,表单的验证将允许该字段是空值。如果字段的blank=False,该字段就是必填的。

db_column:字段的名称,如果未指定,则使用属性的名称。

db_index:若值为True, 则在表中会为此字段创建索引,默认值是False。

default:默认值。

primary_key:若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用。

unique:如果为True, 这个字段在表中必须有唯一值,默认值是False。

choices:一个包含双元素元组的可迭代的对象,用于给字段提供选项。

editable:如果为False,这个字段在管理界面或表单里将不能编辑。默认为True。

help_text:在管理界面表单对象里显示在字段下面的额外帮助文本。

radio_admin:默认的,对于ForeignKey或者拥有choices设置的字段,Django管理界面会使用列表选择框(<select>)。如果radio_admin设置为True的话,Django就会使用单选按钮界面。

unique_for_date:把它的值设成一个DateField或者DateTimeField的字段的名称,可以确保字段在这个日期内不会出现重复值。

unique_for_month:和unique_for_date类似,只是要求字段在指定字段的月份内唯一。

unique_for_year:和unique_for_date以及unique_for_month类似,只是时间范围变成了一年。

verbose_name:除ForeignKey、ManaToManyField和OneToOneField之外的字段都接受一个详细名称作为第一个位置参数。

1.3 简单演示

#图书类
class BookInfo(models.Model):
'''图书模型类'''
# 图书名称
btitle = models.CharField(max_length=20, db_column='title')
# 图书名字唯一
# btitle = models.CharField(max_length=20, unique=True, db_index=True)
# 价格,最大位数为10,小数为2
# bprice = models.DecimalField(max_digits=10, decimal_places=2)
# 出版日期
bpub_date = models.DateField()
# bpub_date = models.DateField(auto_now_add=True) # 创建时间
# bpub_date = models.DateField(auto_now=True) # 更新时间
# 阅读量
bread = models.IntegerField(default=0)
# 评论量
bcomment = models.IntegerField(default=0)
# 删除标记
isDelete = models.BooleanField(default=False) class RoleInfo(models.Model):
'''角色人物模型类'''
# 角色名
rname = models.CharField(max_length=20)
# 性别
rgender = models.BooleanField(default=False)
# 描述信息
rcomment = models.CharField(max_length=200, null=True, blank=False)
# 关系属性
rbook = models.ForeignKey('BookInfo',on_delete=models.CASCADE)
# 删除标记
isDelete = models.BooleanField(default=False)

Django框架(五):模型(一) 定义属性的更多相关文章

  1. Django框架3——模型

    Django数据库层解决的问题 在本例的视图中,使用了pymysql 类库来连接 MySQL 数据库,取回一些记录,将它们提供给模板以显示一个网页: from django.shortcuts imp ...

  2. Django框架简介-模型系统

    2.5 模型 2.5.1 ORM介绍 2.5.1.1 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现 ...

  3. Django框架基础知识05-自定义模板标签与过滤器

    根据一定规则,自己定义出符合需求功能的.用在任何你有需求的地方,因为内置的满足不了我们的需求,不同的东西有不同的定义规则 目前最最重要的就是HOW 一 文件路径配置: templates 存放自定义 ...

  4. Django框架(五) Django之模板语法

    什么是模板 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板 模板语法分类 模板语法之变量:语法为 {{ 变量名 }}: 在 Django 模板中遍历复杂数据结构的关键是句点字 ...

  5. python django -2 ORM模型

    ORM简介 MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库 ORM是“对象-关系-映射”的简称 ...

  6. Django-model模型中Field属性类别及选项

    参考:[Django官方文档] Django所使用模型中一些属性类别及选项(Field and Options) 1. Models Field 各种类型分别对应数据库中的各种类型,这是Django对 ...

  7. Python Django框架笔记(五):模型

    #前言部分来自Django Book (一)    前言 大多数web应用本质上: 1. 每个页面都是将数据库的数据以HTML格式进行展现. 2. 向用户提供修改数据库数据的方法.(例如:注册.发表评 ...

  8. Django框架(七):模型(三) 关联、模型类的属性

    1. 关联 1.1 模型类关系 关系型数据库的关系包括三种类型: ForeignKey:一对多,将字段定义在多的一端中. ManyToManyField:多对多,将字段定义在任意一端中. OneToO ...

  9. 第三百零五节,Django框架,Views(视图函数),也就是逻辑处理函数里的各种方法与属性

    Django框架,Views(视图函数),也就是逻辑处理函数里的各种方法与属性 Views(视图函数)逻辑处理,最终是围绕着两个对象实现的 http请求中产生两个核心对象: http请求:HttpRe ...

随机推荐

  1. UVA - 10689 Yet another Number Sequence (矩阵快速幂求斐波那契)

    题意:已知f(0) = a,f(1) = b,f(n) = f(n − 1) + f(n − 2), n > 1,求f(n)的后m位数. 分析:n最大为109,矩阵快速幂求解,复杂度log2(1 ...

  2. SPOJ - AMR11H Array Diversity (排列组合)

    题意:给定n个数,求包含最大值和最小值的子集(数字连续)和子序列(数字不连续)的个数. 分析: 1.如果n个数都相同,则子集个数为N * (N + 1) / 2,子序列个数为2N-1. 2.将序列从头 ...

  3. DuplicateHandle 伪句柄 与 实句柄的应用

    如果把GetCurrentThread()返回值传递给一个HANDLE句柄,用它进行ResumeThread,结果肯定不是我们想要的.下面的例子详细描述了伪句柄的调用结果: #include &quo ...

  4. RMAN > BACKUP VALIDATE DATABASE ARCHIVELOG ALL

    使用BACKUP ... VALIDATE 命令: You can use the BACKUP VALIDATE command to do the following:        (1)Che ...

  5. java web实现在线编辑word,并将word导出(三)

    前面说到前台呈现的页面是img标签,因此需要在后台生成相应的图片,在img的src内容中改为相应的路径地址:而在生成文档的过程中需要替换相应的img标签.后一部分上篇文章已经讲过,本片主要讲前一部分. ...

  6. springboot-jar-web

    预览 与springboot-jar的区别是: 1.pom.xml 将 <dependency> <groupId>org.springframework.boot</g ...

  7. 移动端主页内容 part4 axios

    ajax  可以动态获取数据内容 vue中发送ajax有很多工具可用 浏览器自带的fetch 现在推荐: axios第三方模块(vue中发送ajax) 特点: 跨平台的数据请求 浏览器中xhr请求 n ...

  8. JavaScript-数据类型和变量

    数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定 ...

  9. 动态加载JS文件方法总结

    1.JQuery方法 $.getScript("./test.js"); //加载js文件 $.getScript("./test.js",function() ...

  10. 干货 | 利用京东云Web应用防火墙实现Web入侵防护

    摘要 本指南描述如何利用京东云Web应用防火墙(简称WAF),对一个简单的网站(无论运行在京东云.其它公有云或者IDC)进行Web完全防护的全过程.该指南包括如下内容: 准备环境 在京东云上准备Web ...