Django中模型(二)

三、定义模型

1、模型、属性、表、字段间的关系:

一个模型类在数据库中对应一张表;在模型类中定义的属性,对应该模型对照表中的字段。

2、定义属性

A、概述

·django根据属性的类型确定以下信息

·当前选择的数据库支持字段的类型

·渲染管理表单时使用的默认html控件

·在管理站点最低限度的验证

B、

·django会为表增加自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后,则django不会再生成默认的主键列

C、属性命名限制

·遵循标识符规则

·由于django的查询方式,不允许使用连续的下划线

3、库

定义属性时,需要字段类型,字段类型被定义在django.db.models.fields目录下,为了方便使用,被导入到django.db.models中

·使用方式:

·导入from django.db import models

·通过models.Field创建字段类型的对象,赋值给属性

4、逻辑删除

·对于重要数据都做逻辑删除,不做物理删除,实现方法是定义isDelete属性,类型为BooleanField,默认值为False

5、字段类型

·AutoField

·一个根据实际ID自动增长的IntegerField,通常不指定如果不指定,一个主键字段将自动添加到模型中

·CharField(max_length=字符长度)

·字符串,默认的表单样式是 TextInput

·TextField

·大文本字段,一般超过4000使用,默认的表单控件是Textarea

·IntegerField

·整数

·DecimalField(max_digits=None, decimal_places=None)

·使用python的Decimal实例表示的十进制浮点数

·参数说明

·DecimalField.max_digits

·位数总数

·DecimalField.decimal_places

·小数点后的数字位数

·FloatField

·用Python的float实例来表示的浮点数

·BooleanField

·true/false 字段,此字段的默认表单控制是CheckboxInput

·NullBooleanField

·支持null、true、false三种值

·DateField([auto_now=False, auto_now_add=False])

·使用Python的datetime.date实例表示的日期

·参数说明

·DateField.auto_now

·每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为false

·DateField.auto_now_add

·当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为false

·说明

·该字段默认对应的表单控件是一个TextInput. 在管理员站点添加了一个JavaScript写的日历控件,和一个“Today"的快捷按钮,包含了一个额外的invalid_date错误消息键

·注意

·auto_now_add, auto_now, and default 这些设置是相互排斥的,他们之间的任何组合将会发生错误的结果

·TimeField

·使用Python的datetime.time实例表示的时间,参数同DateField

·DateTimeField

·使用Python的datetime.datetime实例表示的日期和时间,参数同DateField

·FileField

·一个上传文件的字段

·ImageField

·继承了FileField的所有属性和方法,但对上传的对象进行校验,确保它是个有效的image

6、字段选项

·概述

·通过字段选项,可以实现对字段的约束

·在字段对象时通过关键字参数指定

·null

·如果为True,Django 将空值以NULL 存储到数据库中,默认值是 False

·blanke

·如果为True,则该字段允许为空白,默认值是 False

·注意

·null是数据库范畴的概念,blank是表单验证证范畴的

·db_column

·字段的名称,如果未指定,则使用属性的名称

·db_index

·若值为 True, 则在表中会为此字段创建索引

·default

·默认值

·primary_key

·若为 True, 则该字段会成为模型的主键字段

·unique

·如果为 True, 这个字段在表中必须有唯一值

7、关系

·分类

·ForeignKey:一对多,将字段定义在多的端中

·ManyToManyField:多对多,将字段定义在两端中

·OneToOneField:一对一,将字段定义在任意一端中

·用一访问多

·格式

·对象.模型类小写_set

·示例

grade.students_set

·用一访问一

·格式

·对象.模型类小写

·示例

·grade.students

·访问id

·格式

·对象.属性_id

·示例

·student.sgrade_id

7、元选项

概念:

在模型类中定义Mate类,用于设置元信息

db_table:

定义表名,推荐使用小写字母,默认为项目名(小写)_类名(小写)

ordering:

对象的默认排序字段,获取对象的列表时使用。

ordering[‘id’]          :以id升序排列

ordering[‘-id’]           :以id降序排列

使用排序会增大数据库的开销

Django中模型(二)的更多相关文章

  1. django中模型详解-字段类型与约束条件

    这片博文来详细说明django模型的使用,涉及到django模型的创建,字段介绍,以及django模型的crud操作,以及一对一等操作. 在使用模型之前,我们首先设置数据库选项,django的默认数据 ...

  2. Django中模型(五)

    Django中模型(五) 六.模型查询 1.概述 查询集,表示从数据库获取的对象集合. 过滤器就是一个函数,基于所给的参数限制查询集结果.查询集可以有多个过滤器. 从sql角度来说,查询集合等价于se ...

  3. Django中模型(一)

    Django中模型(一) 一.    基本开发流程 1.       配置数据库 2.       定义模型类:一个模型类都在数据库中对应一张数据表 3.       生成迁移文件 4.       ...

  4. Django中模型(四)

    Django中模型(四) 五.创建对象 1.目的 向数据库中添加数据.当创建对象时,Django不会对数据库进行读写操作,当调用save()方法时,才与数据库交互,将对象保存到数据库中 2.注意 __ ...

  5. Django中模型(三)

    Django中模型(三) 四.模型成员 1.类属性 objects:是Manager类的一个对象,作用是与数据库进行交互. 定义模型类时,没有定义管理器,则默认创建名为objects的管理器. 2.自 ...

  6. django Model模型二及Model模型对数据库的操作

    在django模型中负责与数据库交互的为Model层,Model层提供了一个基于orm的交互框架 一:创建一个最基本的Model from __future__ import unicode_lite ...

  7. Django中模型层中ORM的多表操作

    ORM的多表创建(一对一.一对多,多对多): 1模型创建 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等 ...

  8. Django中模型层中ORM的单表操作

    ORM概念: MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员 ...

  9. django中模型

    一.django需要使用数据库,则需要安装对应的驱动,比如mysql,则需要安装mysqlclient驱动: pip install mysqlclient 二.在settings.py文件中配置数据 ...

随机推荐

  1. 泛型委托Func<T>

    Func<T>——委托只有泛型版本的,接受参数个数可以是若干个,也可以没有,但是必须是有返回值的方法. Func<TResult>——这个表示没有参数,只有返回值TResult ...

  2. 一键LNMP文件

    https://lnmp.org/ LNMP相关软件安装目录Nginx 目录: /usr/local/nginx/MySQL 目录 : /usr/local/mysql/MySQL数据库所在目录:/u ...

  3. Java - 用静态工厂方法代替构造器

    Effective Item - 考虑用静态工厂方法代替构造器我们有两种常见的方法获得一个类的实例: 公有的构造器 提供静态工厂方法(static factory method) 相对公有的构造器,静 ...

  4. JS实现图的创建和遍历

    图分为无向图和有向图 图的存储结构有邻接矩阵.邻接表.十字链表.邻接多重表这四种,最常用的是前两种 本篇主要是利用邻接矩阵实现无向图的创建和遍历(深度优先.广度优先),深度优先其实就是二叉树里的前序遍 ...

  5. 一、Java多线程基础

    一.简介 1.操作系统 在早起的裸机时代,计算机非常地昂贵,而且也没有操作系统的概念,计算机从头到尾只能执行一个程序.如果程序在执行一个耗时的操作,那么在这个过程中,计算机就有大量的资源闲置在那里,这 ...

  6. 优化SQLServer

    由于SQLServer,数据文件mdf过大,造成系统异常卡 一. 更改隔离级别 ALTER DATABASE [B2EC] SET SINGLE_USER WITH ROLLBACK IMMEDIAT ...

  7. 5、static、final、匿名对象、内部类、包、修饰符、代码块

    final关键字 final关键字概念 * A: 概述 继承的出现提高了代码的复用性,并方便开发.但随之也有问题,有些类在描述完之后,不想被继承, 或者有些类中的部分方法功能是固定的,不想让子类重写. ...

  8. JMM和底层实现原理

  9. docker 安装PIL python 报错 IOError: decoder zip not available

    按照网上得方法:安装依赖库:yum install freetype freetype-develyum install libjpeg libjpeg-develyum install zlib z ...

  10. Phoenix 映射 HBase + Maven

    声明 本文基于 Centos6.x + CDH5.x 什么是Phoenix Phoenix的团队用了一句话概括Phoenix:"We put the SQL back in NoSQL&qu ...