浅析django的abstract,proxy, managed
参数 | 类型 | 说明 | 继承 |
abstract | boolean | 是否建表 | 不继承,子类自动充值为默认值(False) |
managed | boolean | 是否自动建表 | 不继承,子类自动充值为默认值(True) |
proxy | boolean | 是否为代理类(不建表) | 不继承,子类自动充值为默认值(False) |
proxy的继承特性,示例代码如下:
原始类Author
class Author(models.Model):first_name = models.CharField(max_length=30)last_name = models.CharField(max_length=40)email = models.EmailField(blank=True,verbose_name='e-mail')def __unicode__(self):return u'%s %s' % (self.first_name, self.last_name)
代理类 AuthorProxy
class AuthorProxy(Author):class Meta:proxy = True
代理类子类 AuthorProxy2
class AuthorProxy2(AuthorProxy):pass
通过sqlall查看(django 1.6.5),建表如下:
CREATE TABLE "books_authorproxy2" ("author_ptr_id" integer NOT NULL PRIMARY KEY REFERENCES "books_author" ("id") DEFERRABLE INITIALLY DEFERRED
);
因此,可以断定,proxy在继承中的特性跟abstract一样。
将以上代码中的proxy换成managed ,并设置为 False,经测试,生成sql如下:
CREATE TABLE "books_authorproxy2" ("authorproxy_ptr_id" integer NOT NULL PRIMARY KEY REFERENCES "books_authorpoxy" ("author_ptr_id") DEFERRABLE INITIALLY DEFERRED
);
即,managed不会继承到子类,子类会默认重置为True
用途
proxy or managed?
官方是这么说的:
So, the general rules are:
1. If you are mirroring an existing model or database table and don’t want all the original database table columns, use Meta.managed=False. That option is normally useful for modeling database views and tables not under the control of Django.
2. If you are wanting to change the Python-only behavior of a model, but keep all the same fields as in the original, use Meta.proxy=True. This sets things up so that the proxy model is an exact copy of the storage structure of the original model when data is saved.
即,通常:
1. 如果你要映射模型到已经存在的数据库,使用managed=False, 这适合不在django控制之下的数据库表和视图。
2. 如果只想要给模型修改python行为,而不需要改变任何字段,使用 proxy=True, 这会保持模型类的数据跟原始表结构一样(实际上就是一个表)
abstract
基本上,父类(abstract)的字段会拷贝到子类的每一个表中(如果子类没有设置Meta.abstract=True), 因此适合的情形,比如给所有表增加一些共性字段,比如创建人等信息。
转载于:https://www.cnblogs.com/Tommy-Yu/p/4096569.html
浅析django的abstract,proxy, managed相关推荐
- 一篇文章浅析Django Form组件相关知识
击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 灭烛怜光满,披衣觉露滋. 前言 在上 ...
- 基于python的火车票售票系统/基于django火车票务网站/火车购票系统
摘 要 随着科学技术的飞速发展,社会的方方面面.各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,火车票售票系统当然也不能排除在外.火车票售票系统是以实际运用为开发背景,运用软件工 ...
- Django框架的电商商城的设计与实现python语言
摘要 随着计算机技术,网络技术的迅猛发展,Internet 的不断普及,网络在各个领域里发挥了越来越重要的作用.特别是随着近年人民生活水平不断提高,电商商城给商家的业务带来了更大的发展机遇. 在经济 ...
- [Django快速开发1]搭建一个简单的博客系统(1)
系列文章目录 Django快速开发0快速搭建环境并得到django项目的hello world 文章目录 系列文章目录 前言 从Django的模型层开始书写 定义文章模型: 使用脚本向sqlite3中 ...
- Django学生个性化培养的教学资源平台的设计与实现计算机毕设源码19385
摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题.针对学生个性化培养的教学资 ...
- Python中的元类是什么?
元类是什么,我们将它们用于什么? #1楼 请注意,此答案适用于2008年编写的Python 2.x,元类在3.x中略有不同. 元类是使"类"工作的秘诀. 新样式对象的默认元类称为& ...
- VRRP协议个人理解(RFC5798)+典型配置+RFC2338/RFC3768文档翻译
本文档源地址位于RFC 2338: Virtual Router Redundancy Protocol,在此仅为个人学习加深理解使用.转载等操作请保留源文档版权声明. RFC2338存在更新RFC3 ...
- Python社区医疗服务平台的设计与实现毕业设计源码221707
摘 要 随着社会的发展,计算机的优势和普及使得社区医疗服务平台系统的开发成为必需.社区医疗服务平台系统主要是借助计算机,通过对医生.社区介绍.体检信息.健康资讯等信息进行管理.减少管理员的工作,同时 ...
- (附源码)Python社区医疗服务平台的设计与实现 毕业设计221707
摘 要 随着社会的发展,计算机的优势和普及使得社区医疗服务平台系统的开发成为必需.社区医疗服务平台系统主要是借助计算机,通过对医生.社区介绍.体检信息.健康资讯等信息进行管理.减少管理员的工作,同时也 ...
最新文章
- 分页请求json数据_pyspider抓取虎嗅网文章数据
- 深度解读 MongoDB 4.4 新特性
- Kubernetes初步学习
- sftp shell 批量上传文件_如何在shell脚本里使用sftp批量传送文件-阿里云开发者社区...
- 全文搜索引擎有哪些?_你想要拥有自己的搜索引擎吗?
- iOS开发UI调试神器----Reveal
- bzoj 3377: [Usaco2004 Open]The Cow Lineup 奶牛序列
- 基于kotlin的coroutines的生命周期管理
- 在这个人人拥抱python的时代,R真的out了吗?
- CentOS安装vim
- MYSQL的基础命令一
- 原生/RN/Flutter选型
- java flappy bird_Java实例---flappy-bird实例解析
- 为什么在房间里显示无服务器,家里路由器在客厅,房间没信号怎么办?
- VS中怎么实现代码换行
- 教育部公布研考违规违法行为举报电话
- Tomcat简介(转)
- BCG矩阵—波士顿矩阵
- HDU 5963 朋友(找规律)
- 安卓x86实际使用virgl案例
热门文章
- android8.1启动前台服务,Android - 保活(1)前台服务保活
- matlab narxnet,请问吧里有大神做过MATLAB时间序列神经网络(NARX)吗?
- 【uni-app】uParse 富文本解析插件遇到长图、大图宽高比异常问题
- floodlight java_floodlight学习系列(1)——在Eclipse中安装运行floodlight
- pandas最大的时间间隔_pandas计算最大连续间隔的方法
- 矩阵迹的性质_矩阵(含逆)的迹、行列式关于矩阵自身的导数计算与Maple验证...
- java 设计模式_快速上手Java设计模式之简介
- 最全整理!Python 操作 Excel 库 xlrd与xlwt 常用操作详解!
- 8000字 | Python数据可视化,完整版实操指南 !
- 5年 Python 功力,总结了 10 个开发技巧