在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 models

class 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)

  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/uploads
upload = models.FileField(upload_to='uploads/')
# or...
# file will be saved to MEDIA_ROOT/uploads/2015/01/30
upload = 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.name class 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}) # 删除华山派时,将令狐冲也删除了
 

      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 models def 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.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:...........

Django 有关 models 数据类型介绍:的更多相关文章

  1. django的models字段介绍

    #增加数据库数据方法#方法1CalcData.objects.create(var1 ='21',var2='22')#方法2obj =CalcData(var1 ='21',var2='22')jo ...

  2. 第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

    Django框架,models.py模块,数据库操作——创建表.数据类型.索引.admin后台,补充Django目录说明以及全局配置文件配置 数据库配置 django默认支持sqlite,mysql, ...

  3. 四 Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

    Django框架,models.py模块,数据库操作——创建表.数据类型.索引.admin后台,补充Django目录说明以及全局配置文件配置 数据库配置 django默认支持sqlite,mysql, ...

  4. Django笔记&教程 4-1 模型(Models)介绍

    Django 自学笔记兼学习教程第4章第1节--模型(Models)介绍 点击查看教程总目录 参考:https://docs.djangoproject.com/en/2.2/topics/db/mo ...

  5. django的models模型类的常用数据类型和选项

    django框架的models模块ORM框架,能够让我们通过编写类的方式,帮助我们自动生成数据库表. 生成的数据库表名为 应用模块名称_类名 数据库表中字段名 如果我们没有在参数中指定,就是我们写的类 ...

  6. Django的models实现分析

    1      引子 1.1     神奇的Django中的models 我们先来看一段在Django项目中常用的代码: 设置数据库models代码: class Students(models.Mod ...

  7. django中的ORM介绍和字段及字段参数

    Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...

  8. Django中的ORM介绍,字段以及字段的参数。

    Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...

  9. Django之Models进阶操作(字段属性)

    字段属性详细介绍 一.字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bigint自增列, ...

  10. 第三百零九节,Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、&并且——queryset对象序列化

    第三百零九节,Django框架,models.py模块,数据库操作——F()和Q()运算符:|或者.&并且 F()可以将数据库里的数字类型的数据,转换为可以数字类型 首先要导入 from dj ...

随机推荐

  1. 使用sync.Once实现高效的单例模式

    1. 简介 本文介绍使用sync.Once来实现单例模式,包括单例模式的定义,以及使用sync.Once实现单例模式的示例,同时也比较了其他单例模式的实现.最后以一个开源框架中使用sync.Once实 ...

  2. Spring Boot中如何优雅地实现异步调用?

    前言 SpringBoot想必大家都用过,但是大家平时使用发布的接口大都是同步的,那么你知道如何优雅的实现异步呢? 这篇文章就是关于如何在Spring Boot中实现异步行为的.但首先,让我们看看同步 ...

  3. yhm的丘赛题解(其中的一些简单题)

    有选择地做了丘赛里的一些简单题,不定期更新     目录 [简单组合数学]2011丘赛个人[应数计算数学概统]第3题题解 [拉格朗日多项式插值]2011丘赛个人[应数计算数学概统]第2题题解 [概率] ...

  4. wx相关

    1.vue图片预览放大 https://www.jianshu.com/p/e3350aa1b0d0 2.js图片文件格式的转换 https://www.jianshu.com/p/ea757f90b ...

  5. 高尔顿钉板的统计意义—R实现

    提到高尔顿,人们总是把他和钉板实验联系在一起,偶尔也会有人提及他是达尔文的表弟.实际上,作为维多利亚时代的人类学家.统计学家.心理学家和遗传学家,同时又是热带探险家.地理学家.发明家.气象学家,高尔顿 ...

  6. 运输问题和指派问题—R实现

    运输问题和指派问题 运输问题经常出现在计划货物配送和从某些供给地区到达需求地区之间的服务中,特别是每个供给地区(起点)的货物可获得量是有限的,每个需求地区(目的地)的货物需求量是已知的.运输问题中最常 ...

  7. GitLab服务器傻瓜式搭建教程

    开始前的准备 需要有一台Linux系统的服务器或虚拟机 QAQ 安装包下载地址:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ 注* 本教程无需下载安装 ...

  8. kettle从入门到精通 第十一课 kettle javascript 解析json数组

    1.json步骤虽然可以解析json数组,但是不够灵活.通过javascript步骤来解析json数组比较灵活,且可以按照需要组装数据流转到下个步骤. 1)步骤名称:可以自定义 2)Transform ...

  9. sql 开窗函数排序遇到空值的处理办法

    sql sever默认null最小 升序排序 null值在最前面,若要放在后面,则: order by case when col is null then 1 else 0 end, col 降序排 ...

  10. 使用Python代码远程连接服务器

    目录 一.paramiko模块的介绍 二.基本使用(用户名密码登录) 三.用公钥私钥连接 一.paramiko模块的介绍 模块介绍 使用Python的第三方模块paramiko实现远程连接服务器 功能 ...