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. 如何构建基于移动相机的AR系统
  2. docker简要学习
  3. Xamarin.Form 初学 之 服务引用-WCF服务引用
  4. 六. 异常处理7.throw:异常的抛出
  5. System.out.println(Runtime.getRuntime().availableProcessors());获取cpu核数
  6. 2008下php上传文件崩溃,php – 当用户反复尝试上传无效文件类型时,网站崩溃
  7. Android中获取应用程序(包)的信息-----PackageManager的使用(一)
  8. 货车运输 vijos 1843 NOIP2013 D1T3 最大生成树,并查集,(伪·LCA)
  9. 8-Spring Boot消息服务
  10. [转]SQL_Server_SSIS_ 最佳实践
  11. Effective_STL 学习笔记(二)小心对 “容器无关代码” 的幻想
  12. 青花瓷音乐的单片机c语言程序,单片机蜂鸣器演奏青花瓷的程序
  13. 北京筑龙出席安徽省《电子招标投标办法》修订意见研讨会并发言
  14. Shadow插件化系列(一)简单详解
  15. 【资料】wod旗帜,纹章
  16. Roaring64Bitmap实践
  17. 涂鸦模组二次开发Zigbee 模组烧录
  18. 趣味小测试.C-Golang-Python的性能小对比
  19. java 校验网站域名格式是否为(xxx.xxx.xxx/xxx/xxx..)正则
  20. python夯实基础日记-类详解

热门文章

  1. 【CSDN】设置图片大小
  2. mysql 5.7 双主配置_MySQL5.7.18 双主配置
  3. 验证码加减乘PHP,使用php实现加减法验证码
  4. 计算机网络优化是啥,浅析计算机网络优化的方案.doc
  5. ios view 切上部分圆角_ios – 具有圆角的UIView:如何正确剪辑子视图?
  6. c语言实训模块化程序设计,C语言 实验三 模块化程序设计.doc
  7. CentOS6.7 安装git
  8. Python实现行转列?!超简单,赶快get起来
  9. 家里“娘娘”发钱,臣不得不遵命呀
  10. 良心之作!超过 10000+ 的互联网团队正在使用的在线 API 文档、技术文档工具