Django models Fild详解
本文参考自:django官方文档models/field
在model中添加字段的格式一般为: field_name = field_type(**field_options)
一 field options(所有字段共用)
1 null 默认为False,True则表示可以为null。(空字符串在数据库中可能被存储为'')
2 blank 默认为False,True表示可以为空。
3 choice 可选的,限制了该选项的字段值必须是所指定的choice中的一个。
from django.db import modelsclass Student(models.Model):FRESHMAN = 'FR'SOPHOMORE = 'SO'JUNIOR = 'JR'SENIOR = 'SR'YEAR_IN_SCHOOL_CHOICES = ((FRESHMAN, 'Freshman'), #第一个参数是真正的model参数,#第二个参数则是方便人们理解阅读(SOPHOMORE, 'Sophomore'),(JUNIOR, 'Junior'),(SENIOR, 'Senior'),)year_in_school = models.CharField(max_length=2,choices=YEAR_IN_SCHOOL_CHOICES,default=FRESHMAN,)def is_upperclass(self):return self.year_in_school in (self.JUNIOR, self.SENIOR)
View Code
4 db_column 数据库column名称。默认为本字段的名称。
5 db_index 如果为True的话,该字段的数据库索引将会被创建
6 default 设置该字段的默认值,可以是值也可以是对象。
7 editable 默认为True,若为False,则不会在admin/界面显示
8 primary_key 若设置为True,则表示将该字段设置为主键。一般情况下django默认会设置一个自增长的id主键。
9 unique 若设置为True,该字段值不可重复
二 field type(字段类型,细分的话可以分为普通字段以及关系字段)
1 普通字段
1 AutoField() 根据已有id自增长的整形唯一字段,一般每个model类不需设置该字段,因为django会为每个model自动设置。
django默认会为每个model类添加如下语句:id = models.AutoField(primary_key=True) 当其他字段添加了primary_key属性,则不会创建id字段了
每个model类仅能有一个主键
2 BooleanField() 布尔型字段,默认的表单窗口部件是CheckBoxInput
3 CharField() 字符型字段,默认的表单窗口部件是TextInput。该字段类型有一个必需参数:max_length 在数据库水平限定了字符串最大长度
4 DateField() 日期字段,字段的值是python中datetime.date的实例,默认的表单窗口是TextInput有几个可选的参数:
auto_now=True/False:当设置为True时,每当该对象使用save()时,该字段的值就会被更新。
auto_now_add=True/False: 当设置为True时,该字段的值为该对象被创建时的日期
5 DateTimeField() 日期和时间字段,值为datetime.datetime实例。默认的表单窗口以及可选参数同上。
6 DecimalField() 混合精度的小数型数字字段。有两个必需的参数:
max_digits=ingt_number:限定数字的最大位数(包含小数位)
decimal_places=int_number:存储数字的小数位
#to store numbers up to 999 with a resolution of 2 decimal places, you’d use models.DecimalField(..., max_digits=5, decimal_places=2)
7 EmailField(max_length=254, **options) 邮件字段,使用EmailValidator进行验证
8 FileField(upload_to=None, max_length=100, **options) 文件上传字段。
这个字段不能设置primary_key和unique选项.在数据库中存储类型是varchar,默认最大长度为100.
有两个可选参数:
upload_to
如果使用默认的FileSystomStorage,文件将会存储到settings文件中配置的MEDIA_ROOT路径中。
upload_to的值也可以为可调用对象,通过调用这个对象可以获得上传路径。
instance=: 定义了FileField的模型实例
filename='': 文件名称。
class MyModel01(models.Model):# file will be uploaded to MEDIA_ROOT/uploadsupload = models.FileField(upload_to='uploads/')# or...# file will be saved to MEDIA_ROOT/uploads/2015/01/30upload = models.FileField(upload_to='uploads/%Y/%m/%d/')#upload_to=可调用对象 def user_directory_path(instance, filename):# file will be uploaded to MEDIA_ROOT/user_<id>/<filename>return 'user_{0}/{1}'.format(instance.user.id, filename)class MyModel02(models.Model):upload = models.FileField(upload_to=user_directory_path)
实例
storage 用来设定文件存储仓库
9 FilePathField(path=None, match=None, recursive=False, max_length=100, **options)
这个字段的值被限制在系统上某个目录中的所有文件名集合中。有三个参数
path='': 该参数必需。上行所说的‘某个目录’的绝对路径。Example: "/home/images"
.
match='pattern': 可选参数。格式是正则表达式。用来拣选符合匹配正则表达式的文件
recursive=True/False: 可选参数,默认为False。设定是否递归该目录下所有子目录的所有文件。
FilePathField(path="/home/images", match="foo.*", recursive=True)
10 FloatField() 浮点字段,默认的表单窗口部件是NumberInput。和DecimalField经常混淆不清,
FloatField在内部使用Python中的float对象,而DecimalField在内部使用Python中的decimal对象。
11 ImageField(upload_to=None, height_field=None, width_field=None, max_length=100, **options)
图像字段。继承了FileField的所有属性和方法。而且还能自动验证上传的对象是否为合法的图像。
12 IntegerField 整形字段。
13 GenericIPAddressField(protocol='both', unpack_ipv4=False, **options) ip地址字段
protocol='both/ipv4/ipv6' 默认为both
unpack_ipv4 用处不大。
14 NullBooleanField 类似于BooleanField,不同的是其允许值为null
15 TextField() 与CharField类似,但一般用来存储体积较大的文本。
16 TimeField(auto_now=False, auto_now_add=False, **options) 时间字段,其值为datetime.time实例
17 URLField(max_length=200, **options) URL字段
类似于CharField的子类,默认最大长度为200.
18 UUIDField(**options) 通用唯一标识字段,当不想用django默认设置的AutoField字段时,可以用该字段代替。
2 关系字段
关系字段:一对一,多对一,多对多
一对一: 现在有很多一对一辅导班,也就是上课时,一个老师对应一个学生,一个学生对应一个老师
多对一: 很多偏远山区的学校可能整个学校只有一个老师,这一个老师对应多个学生,所有的学生对应这一个老师
多对多: 而我们则很幸福,学校里有许多老师,一个老师教习一科,学生有多个老师,老师有多个学生。
1 ForeignKey(othermodel, on_delete, **options) 多对一或者一对多或者外键字段。
othermodel: 所关联的模型,'多' model使用外键关联 '一'model。
当所关联的模型为他自己时,使用'self'
当引用的模型为其他app中的模型时,要加上app名称标签: 'app_name.model_name'
数据库会自动在外键字段上创建索引,可以使用de_index=False关闭该功能。
on_delete: 当删除 "一" 模型对象时,django会根据该参数的值对与该对象相关联的其他对象(也就是 ‘多’)进行操作。
在django1.9以及之前的版本中,on_delete作为一个关键字参数。而在1.10则可以作为第二个参数
models.CASCADE: 默认为models.CASCADE 级联删除。当删除'一'时,‘多’会被删除。比如:
# mysite项目下名为polls的app中的models.py class follower(models.Model):name = models.CharField(max_length=200)menpai = models.ForeignKey('menpai', on_delete=models.CASCADE) #定义了models.CASCADE属性def __str__(self):return self.nameclass menpai(models.Model):name = models.CharField(max_length=200)def __str__(self):return self.name#运行 python3 manager.py shell进入交互页面 >>> from polls.models import follower,menpai >>> m1=menpai(name='huashanpai') >>> m1.save() >>> m2=menpai(name='riyuejiao') >>> m2.save() >>> f1=follower(name='linghuchong',menpai=m1) >>> f1.save() >>> f2=follower(name='renwoxing',menpai=m2) >>> f2.save() >>> f1.menpai <menpai: huashanpai> >>> m1.delete() (2, {'polls.menpai': 1, 'polls.follower': 1}) # 删除华山派时,将令狐冲也删除了
View Code
modles.PROTECT : 当删除一个具有外键关系的对象时,会引发一个异常,阻止删除该对象
models.SET_NULL: 设置删除对象所关联的外键字段为null。但字段的null属性必需为True
models.SET_DEFAULT : 设置删除对象所关联的外键字段为默认的值。
models.SET(value) :设置删除对象所关联的对象的外键字段为value,value也可以是一个可调用函数。
from django.conf import settings from django.contrib.auth import get_user_model from django.db import modelsdef get_sentinel_user():return get_user_model().objects.get_or_create(username='deleted')[0]class MyModel(models.Model):user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.SET(get_sentinel_user),)
models.SET()实例
models.DO_NOTHING : 不做任何操作
limit_choices_to 限制该字段为选项形。格式:limit_choices_to={'is_staff': True}。值也可以为可调用函数。
def limit_pub_date_choices():return {'pub_date__lte': datetime.date.utcnow()}limit_choices_to = limit_pub_date_choices
实例
related_name 设置从关联对象到自身的关系的名称,若值为'+' 则关联对象与自身无逆向关系。详解请看官方文档。
to_field 设置所关联对象的关联字段。默认为关联对象的主键字段。
2 ManyToManyField(othermodel, **options) 多对多字段。
othermodel: 所关联的model名称
db_table: 多对多关系会在两个模型所对应的表中间创建一个‘中间表’ ,将多对多转换为两个多对一,该选项为这个中间表设置名称。一般来说django会默认为中间表创建名称,但人们读起来可能搞不清楚究竟中间表关联到了哪里。
related_name: 同多对一字段中的related_name
limite_choices_to: 同....
symmetrical: 当多对多关联对象为自身时可能会用到的参数。默认为True。a,b同属于person模型,person中的friends字段与自身设置了多对多关系,当该值设置为True时,django假定关系为对称,即:a是b的朋友,那么b也是a的朋友。设置为False时,django会强制为逆向关系创建描述信息。
though: 不想让django自动创建中间表,手动创建中间表所对应的model,通过though指定对应的model名称。
though_field: 当though参数被使用时,该参数才会有效。指定使用哪些中间模型字段来确立两个模型的多对多关系。
3 OneToOneField(othermodel, on_delete, parent_link=False, **options) 一对一字段。
othermodel: .......
on_delete:........
related_name:...........
转载于:https://www.cnblogs.com/jiaojianglong/p/6595713.html
Django models Fild详解相关推荐
- 00x: Django models.Model详解
Models model是对于信息的一种模型封装与定义.它包含了你要存储的必要字段和操作数据的方法.一句话概括就是,每个模型映射了一张数据表. 基本概念: 每个model都是继承于django.db. ...
- Django REST 框架详解 07 | 三大认证与权限六表
文章目录 一.三大认证 1. 认证组件:校验用户 2. 权限组件:校验用户权限 3. 频率组件:限制视图接口被访问次数 4. 分析源码 二.权限六表 1. RBAC 认证 2. 权限三表 3. 权限五 ...
- Django之ContentType详解
Django之ContentType详解 一:什么是ContentType 二:应用场景 三:contenttypes 应用 3.1 创建contenttype表 3.2 创建记录和查询 3.3 创建 ...
- Django入门基础详解
本次使用django版本2.1.2 安装django 安装最新版本 pip install django 安装指定版本 pip install django==1.10.1 查看本机django版本 ...
- python field详解_Django中models Field详解
在model中添加字段的格式一般为: field_name = field_type(**field_options) 一 field options(所有字段共用) 1 null 默认为F ...
- Django MVT模型详解
MVT模型详解 ORM简介 使用MySql数据库 开发流程 使用数据库生成模型类 Model 定义模型 定义属性 字段类型 字段选项 关系 元选项 示例演示 测试数据 类的属性 管理器Manager ...
- Django Model设计详解
Django Model 设计 Django Model设计是Django五项基础核心设计之一(Model设计,URL配置,View编写,Template设计,From使用),也是MVC模式中重要的环 ...
- Django之ModelForm详解
前言 这是一个神奇的组件,通过名字我们可以看出来,这个组件的功能就是把model和form组合起来.先来一个简单的例子来看一下这个东西怎么用: 比如我们的数据库中有这样一张学生表,字段有姓名,年龄,爱 ...
- Django MVT模型详解--高级
高级知识点: 管理静态文件 配置静态文件 中间件 上传图片 Admin站点 ModelAdmin对象 "操作选项"的位置 list_display list_filter list ...
- Django REST 框架详解 06 | 视图家族 Generics 与 Viewsets
文章目录 一.Generics:工具视图 1.群查与单增:ListCreateAPIView 查看源码 代码实现 测试接口 2.添加其他接口 代码实现 接口测试 3.后续问题 二.Viewsets:视 ...
最新文章
- spring vertx_如何在Spring设置Vertx
- 网易开源支持图像识别的自动化UI测试工具,零基础亲测好评!
- indexof方法_[ 翻译 ] ES6中数组去重的三种方法
- rabbitmq 入门demo
- 梯度下降和导数的作用
- 为什么Python是数据科学领域最受欢迎的语言之一?
- jzoj3348. 【NOI2013模拟】秘密任务
- Container with most water
- 史上最失败系统!微软正式终止对Vista支持
- 风火速打印小程序分析
- 西门子定时器有几种_【图】西门子step7功能块中定时器的类型与参数
- JAVA毕设项目大数据在线考试系统在线阅卷系统及大数据统计分析(Vue+Mybatis+Maven+Mysql+sprnig+SpringMVC)
- 干涉测量技术的应用_特殊工程的施工测量技术应用分享
- zznu-2183: 口袋魔方
- 游戏同步方案——帧同步
- PAL到底是720还是768?
- web请求流程与HTTP方法刨析
- 你看得到工具的本质吗
- 联想850服务器维护手册,联想ThinkSystem SN850服务器评测
- BGP 基础与概述-2
热门文章
- 微信如何推送html文件,微信推送怎么附上文件_怎样在微信公众号上传附件图文步骤...
- html reset 无效,HTML中的input type=reset标签失效(不起作用)的可能原因。
- 李航统计学习方法课件 ---由清华大学深圳研究院袁春教授制作
- linux 关闭防火墙,关闭8081端口防火墙
- 常用数据库分页查询SQL汇总
- 《大象 Thinking in UML》学习笔记(三)——UML核心元素之参与者、用例
- excel当前时间增加几天或者几小时
- python输出最大的素数_Python:求X的最大素数
- 制作u盘winpe启动盘_u盘启动盘制作工具 纯净+好用,原来不止是 微pe
- 尺度不变特征变换(SIFT)匹配算法详解