在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. 使用Mathematica做序列的DTFT的几个例子

    ListFourierSequenceTransform[{-2, -1, 1, 3, 3, 1, -1, -2}, \[Omega]] ParametricPlot[{Re[%], Im[%]}, ...

  2. 【LeetCode贪心#09】用最少数量的箭引爆气球(涉及区间重叠情况判断)

    用最少数量的箭引爆气球 力扣题目链接(opens new window) 在二维空间中有许多球形的气球.对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标.由于它是水平的,所以纵坐标并不重 ...

  3. springboot--多环境启动

    法一: 法二:

  4. 2020寒假学习笔记14------Python基础语法学习(三)

    今天学习了Python的基础语法,其中学的内容有: 比较运算符.逻辑运算符.同一运算符.整数缓存问题.基本运算符.复合复制运算符.运算符优先级问题.字符串基本特点.字符串的编码.空字符串和len()函 ...

  5. STM32F407 学习 (0) 各种外设功能 (上)

      本文对正点原子STM32F4探索者的基本功能及外设作最基本的介绍,随笔者本人的学习进程(基本按照正点原子)而不定时更新,起到总结的作用. 一.HAL库编写程序的运行逻辑   HAL库函数(如stm ...

  6. crontab使用说明【一文搞懂Linux定时任务Crontab】

    1.简介 cron是一个在后台运行调度的守护进程,而crontab是一个设置cron的工具.cron调度的是/etc/crontab文件. 2.centos安装crontab yum install ...

  7. Git链接上游仓库

    技术背景 在Git的操作过程中,一般的组织内部工作模式可以在同一个仓库上的master-develop-feature不同分支上进行开发,也有一些人和外部协作者会通过Fork到自己本地的仓库进行更新的 ...

  8. Etherscan本地多文件开源(VScode)

    项目创建 创建文件夹  mkdir Duckereum ​ cdDuckereum 添加nodejs配置  npm init -y 安装依赖添加  npm install -D hardhat npm ...

  9. What's the best way to read and understand someone else's code?

    Find one thing you know the code does, and trace those actions backward, starting at the end Say, fo ...

  10. InnoDB 是如何解决幻读的

    前言 大部分人在日常的业务开发中,其实很少去关注数据库的事务相关问题,基本上都是 CURD 一把梭.正好最近在看 MySQL 的相关基础知识,其中对于幻读问题之前一直没有理解深刻,今天就来聊聊「Inn ...