Python Django进阶教程(三)(模型的高级用法)
2017-05-11 12:03
731 查看
Django版本:1.11
操作系统:Windows
Python:3.5
欢迎加入学习交流QQ群:657341423
数据模型高级使用。这节主要讲模型的使用。回顾一下基础教程的模型设计
新建了三个表,分别Publisher,Author,Book。
其中Book有一个外键(publisher)和多对多值(authors)分别对Publisher和Author构成一个关联。
即Publisher<->Book<->Author
<->这个双向状态,可以通过Book分别与Publisher和Author的互通数据,但是Publisher不能跨越Book去查询Author。因为两者是没有直接关联的。
外键实例:
数据库数据:
Publisher:
Author:
Book:
polls_book_authors:(关联表,自动生成的)
我们在项目运行:python manage.py shell
Book->Publisher,从Book查询到Publisher
输入代码:
解释:
首先导入models里面的类,作为一个对象类型。
看图解释:
图中1、b = Book.objects.get(id=1)建立一个Book对象并查询id=1的数据。
图中2、b.publisher这个publisher是Book里面的字段publisher,这个属性是外键。所以返回结果是Publisher里面的数据。这里我设置是2,即是Publisher的id为2的数据。
图中3和4、因为 b.publisher没有指定返回Publisher那个值,所以默认返回
如果要返回其他值,如b.publisher.website即可。
Publisher->Book,从Publisher查询到Book
我们知道,外键在Book里面,而Publisher是没有外键的。所以这里Publisher->Book用法就和上面说的不一样了。
看图解释:
图中1、p = Publisher.objects.get(name=’luna’)建立一个Publisher对象并查询name=’luna’的数据。
图2和3、p.book_set.all(),属性名称book_set是由模型名称的小写(如book)加_set组成的。查询对应Book里面的数据。all()是默认返回
图4、返回结果。
注意,这里只能返回
title__icontains:查询字段条件:字段__icontains
访问多对多值(Many-to-Many Values)
原理和外键的大同小异,直接看教程即可。
数据库字段增删
如果要对数据库的字段进行增删的话,要进行两个操作。
1、对models.py进行增删属性
2、对数据库字段进行增删。(可以sql语句或直接在可视化工具操作即可)
总的来说,就是保持models和数据库里面的字段一致就可以了。
注:models.py的字段删除了,数据库的可以不删除。但是反过来就不行了。
最后重启服务器就可以了。
其他删除
这里补充一下基础知识的:models的get和filter区别。
看图:
models里面是默认返回name字段的。基础教程是用p.all()是返回
我们可以用p.city实现查询其他字段。
这里get和filter,第一个返回一条数据,如果数据有2条就会报错,filter是符合条件就返回,是一个list。如果要查询city,应确定list位置再查询需要查询的字段。
增加额外的manager方法,修manager返回的初始QuerySet。
这个作用就是可以根据个人实际对models的数据进行筛选和操作等。
增加额外的manager方法
修改初始Manager QuerySets
模型方法:可以在models.py声明字段之外,还可以根据实际写方法。实际用法功能,与Manager 大同小异的。都属于自定义。
执行原始SQL查询
总结:
1、基本上模型的高级用法,就是用过外键,多对多这些数据库设计进行跨表访问数据。
2、数据库和模型的字段增加和删除,这个分别对这两项进行操作即可。
3、manager的额外增加和修改(重写)manager。即对objects的方法定义和重写。
4、models增加方法,这个和manager类似,只是manager在objects上,而这个直接对models的。
5、执行原始的Sql。
个人建议,如果要在models上添加方法,建议用第四点就好了,尽量不要用manager。
进阶教程代码:请点击
操作系统:Windows
Python:3.5
欢迎加入学习交流QQ群:657341423
数据模型高级使用。这节主要讲模型的使用。回顾一下基础教程的模型设计
新建了三个表,分别Publisher,Author,Book。
其中Book有一个外键(publisher)和多对多值(authors)分别对Publisher和Author构成一个关联。
即Publisher<->Book<->Author
<->这个双向状态,可以通过Book分别与Publisher和Author的互通数据,但是Publisher不能跨越Book去查询Author。因为两者是没有直接关联的。
外键实例:
数据库数据:
Publisher:
Author:
Book:
polls_book_authors:(关联表,自动生成的)
我们在项目运行:python manage.py shell
Book->Publisher,从Book查询到Publisher
输入代码:
解释:
首先导入models里面的类,作为一个对象类型。
看图解释:
图中1、b = Book.objects.get(id=1)建立一个Book对象并查询id=1的数据。
图中2、b.publisher这个publisher是Book里面的字段publisher,这个属性是外键。所以返回结果是Publisher里面的数据。这里我设置是2,即是Publisher的id为2的数据。
图中3和4、因为 b.publisher没有指定返回Publisher那个值,所以默认返回
__str__里面的返回值。
如果要返回其他值,如b.publisher.website即可。
Publisher->Book,从Publisher查询到Book
我们知道,外键在Book里面,而Publisher是没有外键的。所以这里Publisher->Book用法就和上面说的不一样了。
看图解释:
图中1、p = Publisher.objects.get(name=’luna’)建立一个Publisher对象并查询name=’luna’的数据。
图2和3、p.book_set.all(),属性名称book_set是由模型名称的小写(如book)加_set组成的。查询对应Book里面的数据。all()是默认返回
__str__里面的返回值。
图4、返回结果。
注意,这里只能返回
__str__里面的返回值。如果返回数据是多条,可以用filter进行筛选。
title__icontains:查询字段条件:字段__icontains
访问多对多值(Many-to-Many Values)
原理和外键的大同小异,直接看教程即可。
数据库字段增删
如果要对数据库的字段进行增删的话,要进行两个操作。
1、对models.py进行增删属性
2、对数据库字段进行增删。(可以sql语句或直接在可视化工具操作即可)
总的来说,就是保持models和数据库里面的字段一致就可以了。
注:models.py的字段删除了,数据库的可以不删除。但是反过来就不行了。
最后重启服务器就可以了。
其他删除
这里补充一下基础知识的:models的get和filter区别。
看图:
models里面是默认返回name字段的。基础教程是用p.all()是返回
__str__默认返回值。但是实际中我们会需要其他字段。没理由将函数str每个值都写进去的。
我们可以用p.city实现查询其他字段。
这里get和filter,第一个返回一条数据,如果数据有2条就会报错,filter是符合条件就返回,是一个list。如果要查询city,应确定list位置再查询需要查询的字段。
增加额外的manager方法,修manager返回的初始QuerySet。
这个作用就是可以根据个人实际对models的数据进行筛选和操作等。
增加额外的manager方法
修改初始Manager QuerySets
模型方法:可以在models.py声明字段之外,还可以根据实际写方法。实际用法功能,与Manager 大同小异的。都属于自定义。
执行原始SQL查询
总结:
1、基本上模型的高级用法,就是用过外键,多对多这些数据库设计进行跨表访问数据。
2、数据库和模型的字段增加和删除,这个分别对这两项进行操作即可。
3、manager的额外增加和修改(重写)manager。即对objects的方法定义和重写。
4、models增加方法,这个和manager类似,只是manager在objects上,而这个直接对models的。
5、执行原始的Sql。
个人建议,如果要在models上添加方法,建议用第四点就好了,尽量不要用manager。
进阶教程代码:请点击
相关文章推荐
- Python Django进阶教程(一)(高级视图和URL配置)
- Django进阶——模型的高级用法
- Python Django基础教程(三)(模型models)
- Python Django进阶教程(四)(通用视图)
- python3开发进阶-Django框架的中间件的五种用法和逻辑过程
- Python Django进阶教程(五)(session,Django用户认证)
- django教程--model教程之查询高级用法
- python进阶之PIL 简明教程 - 基本用法
- django book学习笔记――模型高级进阶
- 【django 学习笔记】09-数据模型高级进阶
- python后台架构Django教程——数据模型Model
- 20121030 The django book 笔记 数据模型高级进阶
- Django笔记 —— 模型高级进阶
- Python Django进阶教程(六)(缓存机制,CSRF)
- python3开发进阶-Django视图(View)的常见用法
- Python爬虫教程——入门四之Urllib库的高级用法
- Python Django进阶教程(二)(模版过滤器,标签)
- Python Django进阶教程(七)(部署,ajax通信以及文件上存)
- Django------ Advanced Models 模型高级进阶 2012.09.02
- (12)Django框架学习-Model进阶用法