本文参考自: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详解相关推荐

  1. 00x: Django models.Model详解

    Models model是对于信息的一种模型封装与定义.它包含了你要存储的必要字段和操作数据的方法.一句话概括就是,每个模型映射了一张数据表. 基本概念: 每个model都是继承于django.db. ...

  2. Django REST 框架详解 07 | 三大认证与权限六表

    文章目录 一.三大认证 1. 认证组件:校验用户 2. 权限组件:校验用户权限 3. 频率组件:限制视图接口被访问次数 4. 分析源码 二.权限六表 1. RBAC 认证 2. 权限三表 3. 权限五 ...

  3. Django之ContentType详解

    Django之ContentType详解 一:什么是ContentType 二:应用场景 三:contenttypes 应用 3.1 创建contenttype表 3.2 创建记录和查询 3.3 创建 ...

  4. Django入门基础详解

    本次使用django版本2.1.2 安装django 安装最新版本 pip install django 安装指定版本 pip install django==1.10.1 查看本机django版本 ...

  5. python field详解_Django中models Field详解

    在model中添加字段的格式一般为:  field_name = field_type(**field_options) 一  field options(所有字段共用) 1  null   默认为F ...

  6. Django MVT模型详解

    MVT模型详解 ORM简介 使用MySql数据库 开发流程 使用数据库生成模型类 Model 定义模型 定义属性 字段类型 字段选项 关系 元选项 示例演示 测试数据 类的属性 管理器Manager ...

  7. Django Model设计详解

    Django Model 设计 Django Model设计是Django五项基础核心设计之一(Model设计,URL配置,View编写,Template设计,From使用),也是MVC模式中重要的环 ...

  8. Django之ModelForm详解

    前言 这是一个神奇的组件,通过名字我们可以看出来,这个组件的功能就是把model和form组合起来.先来一个简单的例子来看一下这个东西怎么用: 比如我们的数据库中有这样一张学生表,字段有姓名,年龄,爱 ...

  9. Django MVT模型详解--高级

    高级知识点: 管理静态文件 配置静态文件 中间件 上传图片 Admin站点 ModelAdmin对象 "操作选项"的位置 list_display list_filter list ...

  10. Django REST 框架详解 06 | 视图家族 Generics 与 Viewsets

    文章目录 一.Generics:工具视图 1.群查与单增:ListCreateAPIView 查看源码 代码实现 测试接口 2.添加其他接口 代码实现 接口测试 3.后续问题 二.Viewsets:视 ...

最新文章

  1. spring vertx_如何在Spring设置Vertx
  2. 网易开源支持图像识别的自动化UI测试工具,零基础亲测好评!
  3. indexof方法_[ 翻译 ] ES6中数组去重的三种方法
  4. rabbitmq 入门demo
  5. 梯度下降和导数的作用
  6. 为什么Python是数据科学领域最受欢迎的语言之一?
  7. jzoj3348. 【NOI2013模拟】秘密任务
  8. Container with most water
  9. 史上最失败系统!微软正式终止对Vista支持
  10. 风火速打印小程序分析
  11. 西门子定时器有几种_【图】西门子step7功能块中定时器的类型与参数
  12. JAVA毕设项目大数据在线考试系统在线阅卷系统及大数据统计分析(Vue+Mybatis+Maven+Mysql+sprnig+SpringMVC)
  13. 干涉测量技术的应用_特殊工程的施工测量技术应用分享
  14. zznu-2183: 口袋魔方
  15. 游戏同步方案——帧同步
  16. PAL到底是720还是768?
  17. web请求流程与HTTP方法刨析
  18. 你看得到工具的本质吗
  19. 联想850服务器维护手册,联想ThinkSystem SN850服务器评测
  20. BGP 基础与概述-2

热门文章

  1. 微信如何推送html文件,微信推送怎么附上文件_怎样在微信公众号上传附件图文步骤...
  2. html reset 无效,HTML中的input type=reset标签失效(不起作用)的可能原因。
  3. 李航统计学习方法课件 ---由清华大学深圳研究院袁春教授制作
  4. linux 关闭防火墙,关闭8081端口防火墙
  5. 常用数据库分页查询SQL汇总
  6. 《大象 Thinking in UML》学习笔记(三)——UML核心元素之参与者、用例
  7. excel当前时间增加几天或者几小时
  8. python输出最大的素数_Python:求X的最大素数
  9. 制作u盘winpe启动盘_u盘启动盘制作工具 纯净+好用,原来不止是 微pe
  10. 尺度不变特征变换(SIFT)匹配算法详解