模型中字段类型及字段参数和表关系操作(二十一)

一、常用的模型字段类型及字段参数

1、常用的模型字段类型

(参考文档:https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types

(1)常用的字段类型的映射关系:

(2)必须明白的常用的字段类型:

1. IntegerField : 整型,映射到数据库中的int类型。

2. CharField:  字符类型,映射到数据库中的varchar类型,通过max_length指定最大长度。

3. TextField:  文本类型,映射到数据库中的text类型。

4. BooleanField: 布尔类型,映射到数据库中的tinyint类型,在使用的时候,传递True/False进去。如果要可以为空,则用NullBooleanField。

5. DateField:  日期类型,没有时间。映射到数据库中是date类型,在使用的时候,可以设置DateField.auto_now每次保存对象时,自动设置该字段为当前时间。设DateField.auto_now_add当对象第一次被创建时自动设置当前时间。

6. DateTimeField:  日期时间类型。映射到数据库中的是datetime类型,在使用的时候,传递datetime.datetime()进去。

**7AutoField:自定义主键的时候用的字段类型,默认为整型,并且只要一个参数即可,即AutoField(primary_ke=True)就可以自定义一个主键了。在实际情况下模型类里面会自动创建主键,不需要我们自定义。



2、  字段参数

(官方文档:https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-options

(1)Field的常用参数:

1、primary_key: 指定是否为主键。

2、unique:  指定是否唯一。

3、null:  指定是否为空,默认为False。

4、blank: 等于True时form表单验证时可以为空,默认为False。

5、default:  设置默认值。

6、DateField.auto_now:  每次修改都会将当前时间更新进去,只有调用QuerySet.update方法将不会调用。这个参数只是Date字段数据类型和DateTime字段数据类型以及TimModel.save()方法才会写这个参数。

7、DateField.auto_now_add:  第一次添加进去,都会将当前时间设置进去。以后修改,不会修改这个值


3、具体例子(在views.py文件下写代码)

(1)创建模型类

注意:当用CharField字段类型的时候一定要用max_length参数,否则报错。

(2)执行生成并且迁移映射文件的命令后,查看数据表。

(3)插入数据

(4)查看插入的数据.

二、常用的查询

1、 查询的基本规则

(1)通过什么来进行查询?

        通过模型类上的管理器来构造QuerySet。

(2)模型类上的管理器是啥?

       模型类.objects

(3)QuerySet 表示数据库中对象的集合,可以等同于select 语句。 


2、常用的查询方法(采用的是User模型类):

1、 first() 获取第一条数据,返回的是一个对象

2、last() 获取最后一条数据,返回的也是一个对象

思考:排序规则? 默认通过主键。通过_meta 设置

3、 get(**kwargs) 根据给定的条件,获取一个对象,如果有多个对象符合则保存

4、all() 获取所有记录,返回的是queryset

5、filter(**kwargs) 根据给定的条件,获取一个过滤后的queryset,多个条件使用and连接。

6、 exclude(**kwargs) 跟filter使用方法一致,作用想反,它是排除。

7、多条件的OR连接 用到Q对象,django.db.models.Q

8、values(*fields) 返回一个queryset,返回一个字典列表,而不是数据对象。

9、 only(*fiels) 返回querySet ,对象是列表,注意only一定包含主键字段

10、 defer(*fields) 返回一个QuerySet,作用和only相反

11、 order_by(*fields) 根据给定的字段来排序 默认是升序,字段名前加上 ‘-’代表反序

12切片 和python的列表切片用法相似,不支持负索引,数据量大时不用步长

      *** 切片过后,不再支持,附加过滤条件与排序


3、 常用的查询条件:

注意:查找对象的条件的意思是传给以上方法的一些参数。相当于是SQL语句中的where语句后面的条件,语法为字段名__规则(是连着2个下划线哦)


4、 聚合查询函数的用法

(1)导入式子:

from django.db.models import Count, Avg, Max, Min, Sum

注意:通过queryset的aggregate方法来实现相应的功能


(2)示例图如下所示:

5、 分组聚合方式(分组在操作中一般都要聚合)

(1)结合 values,annotate 和聚合方法一起实现(例如:查询男生有几个,女生有几个)

(2)示例图如下所示:


三、表关系的实现

1、 表基本的三种关系

2、 表关系图(E-R图):

3、 表关系的例子:

(1)分析表关系并且创建E-R图

(2)创建模型类:

(3)查看数据库中创建的表:

写好模型类后,执行生成映射文件的命令:

    执行完makemigrations和migrate的命令后,在数据库我们能看到5张表,其中多对多关系的ManyToManyField方法自动生成了关系表.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 原文:https://my.oschina.net/liuyuantao/blog/751438 查询集API 参...
    阳光小镇少爷阅读 9,294评论 0 8
  • Django 准备 “虚拟环境为什么需要虚拟环境:到目前位置,我们所有的第三方包安装都是直接通过 pip inst...
    33jubi阅读 5,141评论 0 5
  • Django 1.8.2 文档Home | Table of contents | Index | Modules...
    轩辕小爱阅读 6,946评论 0 2
  • 模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立性)。软件设计中通常用耦合度和内聚...
    riverstation阅读 6,367评论 0 8
  • 前言 根据前几篇文章的分享已经了解djangoWeb开发一般步骤为:创建虚拟环境安装django创建项目创建应用在...
    博行天下阅读 4,847评论 0 2

友情链接更多精彩内容