django.db.models.Model 的 Meta参数
参数 类型 说明 继承
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相关推荐

  1. 一篇文章浅析Django Form组件相关知识

    击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 灭烛怜光满,披衣觉露滋. 前言 在上 ...

  2. 基于python的火车票售票系统/基于django火车票务网站/火车购票系统

    摘  要 随着科学技术的飞速发展,社会的方方面面.各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,火车票售票系统当然也不能排除在外.火车票售票系统是以实际运用为开发背景,运用软件工 ...

  3. Django框架的电商商城的设计与实现python语言

     摘要 随着计算机技术,网络技术的迅猛发展,Internet 的不断普及,网络在各个领域里发挥了越来越重要的作用.特别是随着近年人民生活水平不断提高,电商商城给商家的业务带来了更大的发展机遇. 在经济 ...

  4. [Django快速开发1]搭建一个简单的博客系统(1)

    系列文章目录 Django快速开发0快速搭建环境并得到django项目的hello world 文章目录 系列文章目录 前言 从Django的模型层开始书写 定义文章模型: 使用脚本向sqlite3中 ...

  5. Django学生个性化培养的教学资源平台的设计与实现计算机毕设源码19385

    摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题.针对学生个性化培养的教学资 ...

  6. Python中的元类是什么?

    元类是什么,我们将它们用于什么? #1楼 请注意,此答案适用于2008年编写的Python 2.x,元类在3.x中略有不同. 元类是使"类"工作的秘诀. 新样式对象的默认元类称为& ...

  7. VRRP协议个人理解(RFC5798)+典型配置+RFC2338/RFC3768文档翻译

    本文档源地址位于RFC 2338: Virtual Router Redundancy Protocol,在此仅为个人学习加深理解使用.转载等操作请保留源文档版权声明. RFC2338存在更新RFC3 ...

  8. Python社区医疗服务平台的设计与实现毕业设计源码221707

    摘  要 随着社会的发展,计算机的优势和普及使得社区医疗服务平台系统的开发成为必需.社区医疗服务平台系统主要是借助计算机,通过对医生.社区介绍.体检信息.健康资讯等信息进行管理.减少管理员的工作,同时 ...

  9. (附源码)Python社区医疗服务平台的设计与实现 毕业设计221707

    摘 要 随着社会的发展,计算机的优势和普及使得社区医疗服务平台系统的开发成为必需.社区医疗服务平台系统主要是借助计算机,通过对医生.社区介绍.体检信息.健康资讯等信息进行管理.减少管理员的工作,同时也 ...

最新文章

  1. 分页请求json数据_pyspider抓取虎嗅网文章数据
  2. 深度解读 MongoDB 4.4 新特性
  3. Kubernetes初步学习
  4. sftp shell 批量上传文件_如何在shell脚本里使用sftp批量传送文件-阿里云开发者社区...
  5. 全文搜索引擎有哪些?_你想要拥有自己的搜索引擎吗?
  6. iOS开发UI调试神器----Reveal
  7. bzoj 3377: [Usaco2004 Open]The Cow Lineup 奶牛序列
  8. 基于kotlin的coroutines的生命周期管理
  9. 在这个人人拥抱python的时代,R真的out了吗?
  10. CentOS安装vim
  11. MYSQL的基础命令一
  12. 原生/RN/Flutter选型
  13. java flappy bird_Java实例---flappy-bird实例解析
  14. 为什么在房间里显示无服务器,家里路由器在客厅,房间没信号怎么办?
  15. VS中怎么实现代码换行
  16. 教育部公布研考违规违法行为举报电话
  17. Tomcat简介(转)
  18. BCG矩阵—波士顿矩阵
  19. HDU 5963 朋友(找规律)
  20. 安卓x86实际使用virgl案例

热门文章

  1. android8.1启动前台服务,Android - 保活(1)前台服务保活
  2. matlab narxnet,请问吧里有大神做过MATLAB时间序列神经网络(NARX)吗?
  3. 【uni-app】uParse 富文本解析插件遇到长图、大图宽高比异常问题
  4. floodlight java_floodlight学习系列(1)——在Eclipse中安装运行floodlight
  5. pandas最大的时间间隔_pandas计算最大连续间隔的方法
  6. 矩阵迹的性质_矩阵(含逆)的迹、行列式关于矩阵自身的导数计算与Maple验证...
  7. java 设计模式_快速上手Java设计模式之简介
  8. 最全整理!Python 操作 Excel 库 xlrd与xlwt 常用操作详解!
  9. 8000字 | Python数据可视化,完整版实操指南 !
  10. 5年 Python 功力,总结了 10 个开发技巧