从源码中详解Django中 Models的Field字段.

Web后端离不开数据库的设计, django也不例外, 庆幸的是django提供了 Model 类,让我们来实现数据库的操作, 从而让开发更加简单上手。这篇博客记录一下关于models类的几个步骤, 分别为 models中的 Field字段类型,包括字符串类型,整形,时间类型等等, 还有一对一, 一对多, 多对多等等, 还涉及到Field字段中的属性介绍.

关于models 类里面的操作是非常多的, 我们不需要全部都掌握, 只是挑一些我认为很重要的讲一下就可以了,喜欢的话,可以点个赞,支持与我. ~

谈到django,就不得不提一下其中的model模型了,这里面的Field字段也是一个学点,只有真正掌握这些,才能顺势而为, 一起来阅读源码学习吧。


工具: pycharm 2020
《django 从入门到 放弃 》第十一篇
沙漏在下雨

写在前面的提示:

在django中,我们创建数据库首先要在models.py里面编写我们的代码,然后用命令行进行数据表的创建和迁移操作,那么接下来我们就要开始操作,并完成这些.

在models.py 中

from django.db import models


# Create your models here.

之后我们在这里编写代码:

from django.db import models


# Create your models here.

class Book(models.Model):
    book_name = models.CharField(max_length=64)
    author = models.CharField(max_length=64)

一个python的类,就是对应数据库的一个表, 下面的一个个静态属性就是对应着数据库中的一个个字段名,这个类我们必须要去继承 models.Model, 之后, 那 CharField 是什么呢? 括号里面的参数又是什么呢? 之后有该干什么呢? 别急, 慢慢看.

比如我们现在就只是创建这2个字段就可以了, 接下来, 我们使用命令

py manage.py makemigrations    # 生成表
py manage.py  migrate 			# 进行数据迁移

之后,就可以在我们数据库里看到多出一些表来了, 之后你可以选择把这些类,去注册到admin里面, 都是可以的, 我们的关键是要理解这里面的 像CharField 这样的是如何操作的,以及里面的参数是什么。


models中的Field字段介绍:

来到 django 内的源码中
from django.db.models.fields import Field.
我们看下 all 里面包括多少 Field 类型,

在这里插入图片描述

非常多的Field类型, 其中就包括我们刚才使用 CharField 类型, 其实这些类型是对应这数据库中的, 如果有用过数据库的朋友应该知道, 在创建数据库的时候,我们需要设置字段的类型, 什么 int, char255, date, datetime, text, longtext , 之类的, 这个Field就是对应数据库的不同类型, 这么多的Field, 换做谁估计都背不下来把? 那么,我们就介绍一下非常常用的字段把.

常用 Field 类型:

CharField():
  • 用来匹配字符串类型,本质这个类里面封装了一个正则匹配,
  • 用法: book_name = models.CharField(max_length=64) , 至少要有一个 max_length 字段, 因为这些字段都是通用的,下面会一起介绍.
AutoField():
  • 自增字段, 里面默认 (Primary_key=Ture), 设置为主键, 如果设计表的时候,不加则表示django会自动生成一个 id 的 AutoField() , 表示主键的意思, 表中一定有一个主键pk
  • 写的时候可以不加, django会自动生成一个 id
IntegerField():
  • 用来匹配整形数值类型
DateFiled():
  • 用来匹配 年月日时间类型
DateTimeFiled():
  • 用来匹配 年月日小时分钟秒时间类型
DecimalFiled():
  • 用来匹配精度小数,
    money = models.DecimalField(max_digits=4, decimal_places=3)
    其中,max_digits=4,限定数字的最大位数(包含小数位);decimal_places=3,限制小数的最大位数。
BooleanFiled():
  • 用来匹配布尔类型
TextFiled():
  • 用来匹配长文本类型
EmailField():
  • 用来匹配邮箱,
    还有其他的 url, file, json 之类的匹配,我感觉没啥用, 直接用 charField就可以直接代替得了。

models中关于Field中属性介绍:

前面讲了这么多Field字段, 其实他们大部分都是存在共同属性的。 也就是我们只要会了其中一部分,基本都可以通吃。

同样,我们看源码先,
from django.db.models.fields import Field
还是在这个 Field下面,我们可以找到 init 函数,

在这里插入图片描述
这括号里面的全都是他们的共同方法,为什么这么说呢? 如果你有阅读源码的能力, 你可以很轻松的知道, 这些 Field 类型,都是继承至 Field 这个爹的, 爹有的,他们都有。

在这里插入图片描述

画个图就知道了。

在这里插入图片描述

知道了他们之间的继承关系,就可以很清楚的知道这些怎么用了, 这些字段,源码中有些会给到注释, 但是是纯英文的, 官网也有字段介绍, 那我结合一下我自己的翻译, 来介绍一下吧。


verbose_name:
  • 设置此字段 , 将在 admin 后台管理系统界面上的显示名称,如果没有设置这个字段,Django 将会直接展示字段名并且将字段中的下划线转变为空格, 这个比较重要,每个都需要设置的。
  • name = models.CharField(verbose_name="学生名", max_length=20)
  • 那么后端admin就这样显示:
    在这里插入图片描述
    不设置,就显示 name
primary_key=False
  • 设置主键, 默认大家都不设置, 因为主键只能有一个, 当前只是 id
  • 如果设置了,也是可以的,可以起到加速查找,但是限制了列值只能唯一,且不为空,
  • 至少要满足主键的条件, 因为设置了主键, 等于开启了索引, 查找自然就快了点.
max_length=None min_length=None

设置这个字段的最大长度和最小长度

unique=False

设置了, 就会添加一个索引, 加速查找, 且唯一, 显示这个列值唯一,不可以出现相同的

db_index=False

设置了,就会添加索引, 加速查找, 区别一下 unique, pk, 这个只可以开启索引, 加速查找

blank=False

设置了, 就可以存空的值

null =False

默认为 False,如果此选项为 False 建议加入 default 选项来设置默认值。如果设置为 True,表示该列值允许为空。日期型、时间型以及数字型字段不接受空字符串。所以当设置 IntegerField,DateTimeField 型字段可以为空时,需要将 blank 与 null 均设为 True 才可以。

提示:对于 CharFiled 和 TextFiled 这样的字符串类型,null 字段应该设置为 False,如果为 Ture,对于空数据就会有两种概念。

这二个字段,贼鸡儿难理解, blank 表示可以啥都不干, 存空的值, null 表示 NULL 值

default
  • 表示默认值, 默认为空
editable=True
  • 表示是否可以在admin里面进行编辑, 默认是可以的。
db_column=None
  • 这个选项用于设置数据库表字段的名称。如果没有指定,Django 默认使用 Model 中字段的名字
help_text=’’
  • 如果设置了, 将会在 admin 的字段下面看到 你设置的提示信息
choices=None
  • 这个选项用于给字段设置可以选择的值。它是一个可迭代对象,即列表或者元组,其中每一个元素都是一个二元组(a,b)的形式,a 是用来选择的对象,b 是对 a 的描述信息。比如我们对某个人性别定义数据表如下所示:
# 创建表
class UserInfo(models.Model):   
# 定义chocies参数的对应关系,以元组(或者列表)的形式进行表述:   
choices = (     
    ('male', '男性'),    
    ('female', '女性'),   
)    
gender = models.CharField(max_length=2, choices = choices, default='male')
error_messages=None
  • 错误信息, 就是当你输入字段的时候, 输错了,将会提示什么, 默认是django内置好的, 如果要 diy, 也是可以的;
  • 不过这用的少, 一般是用来 Form表单进行数据验证的时候,用的多
class book(models.Model):
	name = models.CharField(max_length=32, error_message= {
			"max_length":"超过了最大显示了",
			"invaild":"格式不对呀",
})

这样之类的。自定义这些错误信息.

不过真用的少, 毕竟在 admin里面, 一般都是自己人看得到内部信息, 还是用在 form表单中多点。

谈到django,就不得不提一下其中的model模型了,这里面的Field字段也是一个学点,只有真正掌握这些,才能顺势而为, 一起来阅读源码学习吧。

关于一对一, 一对多,以及多对多,表的操作,联表操作,我们下一篇在介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值