Django 模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性。以下对此作一总结:

  • abstract
     这个属性是定义当前的模型类是不是一个抽象类。所谓抽象类是不会对应数据库表的。一般我们用它来归纳一些公共属性字段,然后继承它的子类可以继承这些字段。比如下面的代码中Human是一个抽象类,Employee是一个继承了Human的子类,那么在运行syncdb命令时,不会生成Human表,但是会生成一个Employee表,它包含了Human中继承来的字段,以后如果再添加一个Customer模型类,它可以同样继承Human的公共属性:
class Human(models.Model):
    name=models.CharField(max_length=100)
    GENDER_CHOICE=((u'M',u'Male'),(u'F',u'Female'),)
    gender=models.CharField(max_length=2,choices=GENDER_CHOICE,null=True)
    class Meta:
        abstract=True
class Employee(Human):
    joint_date=models.DateField()
class Customer(Human):
    first_name=models.CharField(max_length=100)
    birth_day=models.DateField()

上面的代码,执行python manage.py syncdb 后的输出结果入下,可以看出Human表并没有被创建:

$ python manage.py syncdb
Creating tables ...
Creating table myapp_employee
Creating table myapp_customer
Installing custom SQL ...
Installing indexes ...
No fixtures found.

  • app_label

app_label这个选项只在一种情况下使用,就是你的模型类不在默认的应用程序包下的models.py文件中,这时候你需要指定你这个模型类是那个应用程序的。比如你在其他地方写了一个模型类,而这个模型类是属于myapp的,那么你这是需要指定为:

app_label='myapp'

  • db_table

db_table是用于指定自定义数据库表名的。Django有一套默认的按照一定规则生成数据模型对应的数据库表名,如果你想使用自定义的表名,就通过这个属性指定,比如:

table_name='my_owner_table'

  • db_tablespace

有些数据库有数据库表空间,比如Oracle。你可以通过db_tablespace来指定这个模型对应的数据库表放在哪个数据库表空间。
  • get_latest_by

由于Django的管理方法中有个lastest()方法,就是得到最近一行记录。如果你的数据模型中有 DateField 或 DateTimeField 类型的字段,你可以通过这个选项来指定lastest()是按照哪个字段进行选取的。
  • managed

由于Django会自动根据模型类生成映射的数据库表,如果你不希望Django这么做,可以把managed的值设置为False。
  • order_with_respect_to

这个选项一般用于多对多的关系中,它指向一个关联对象。就是说关联对象找到这个对象后它是经过排序的。指定这个属性后你会得到一个get_XXX_order()和set_XXX_order()的方法,通过它们你可以设置或者回去排序的对象。
  • ordering

这个字段是告诉Django模型对象返回的记录结果集是按照哪个字段排序的。比如下面的代码:

ordering=['order_date'] # 按订单升序排列
ordering=['-order_date'] # 按订单降序排列,-表示降序
ordering=['?order_date'] # 随机排序,?表示随机

  • permissions

permissions主要是为了在Django Admin管理模块下使用的,如果你设置了这个属性可以让指定的方法权限描述更清晰可读。
  • proxy

这是为了实现代理模型使用的,这里先不讲随后的文章介绍。
  • unique_together

unique_together这个选项用于:当你需要通过两个字段保持唯一性时使用。比如假设你希望,一个Person的FirstName和LastName两者的组合必须是唯一的,那么需要这样设置:

unique_together = (("first_name", "last_name"),)

  • verbose_name

verbose_name的意思很简单,就是给你的模型类起一个更可读的名字:

verbose_name = "pizza"

  • verbose_name_plural

这个选项是指定,模型的复数形式是什么,比如:

verbose_name_plural = "stories"

如果不指定Django会自动在模型名称后加一个’s’

Django模型层Meta内部类详解相关推荐

  1. Django模型之Meta选项详解

    Django模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.而可用的选项大致包含以下几类 abstract 这个属性是定义当前的模型是不是一个抽象类.所谓抽象类是不会对应数据 ...

  2. Django模型之Meta属性详解

    Django模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.而可用的选项大致包含以下几类 abstract 这个属性是定义当前的模型是不是一个抽象类.所谓抽象类是不会对应数据 ...

  3. Django 模型层(models) 复杂查询详解

    Django 模型层(models) 复杂查询详解 一般Django orm 和原生sql混合使用 1.测试文件 只单独测试django中的某一个py文件 不一定是tests.py 1.配置 在任意一 ...

  4. 目标检测特殊层:PSROIPooling详解

    1. Position Sensitive ROI-Pooling 简介 Position Sensitive ROI Pooling(位置敏感的候选区域池化)是检测框架R-FCN的主要创新点.一般来 ...

  5. Web开发-Django模型层

    Django模型层 简述 Django框架处理业务的逻辑一般如下(省略图,源于网络,侵删) 可以看到,Django自带了一套ORM机制,这也是Django框架的核心-"全面",将一 ...

  6. 内部类详解————匿名内部类

    内部类三连击: <内部类详解----匿名内部类> <内部类详解----局部内部类> <内部类详解----静态嵌套类> 应用场景 由于匿名内部类不利于代码的重用,因此 ...

  7. pythondjango教程_Python 中Django安装和使用教程详解

    一.安装 一般使用cmd 安装就可以 手动安装通过下载方式 二.配置使用 1.通过cmd新建一个项目,我是在桌面新建 上面命令会在桌面新建pythonDjango文件夹,在里面会生成如下图两个文件 m ...

  8. 隐马尔可夫模型之Baum-Welch算法详解

    隐马尔可夫模型之Baum-Welch算法详解 前言 在上篇博文中,我们学习了隐马尔可夫模型的概率计算问题和预测问题,但正当要准备理解学习问题时,发现学习问题中需要EM算法的相关知识,因此,上一周转而学 ...

  9. 数据库系统模式(schema)和模型(model)详解

     数据库系统模式(schema)和模型(model)详解 数据(data)是描述事物的符号记录. 模型(Model)是现实世界的抽象. 数据模型(Data Model)是数据特征的抽象,是数据库管 ...

最新文章

  1. 【Qt】Qt5在ubuntu16.04无法输入中文解决方式
  2. 发现一个问题,可能是Sql Express 2005的Bug
  3. Docker容器实战思维
  4. 刚刚上班才回来,今天和你说说hash数组
  5. http服务器响应格式,熟悉Http协议的请求和响应格式,编写一个简单的Http服务器。 基本要求:1 正确解...
  6. LeetCode Week 1:第 1 ~ 10 题
  7. XE5 搭建DataSnap服务
  8. 谈谈web上各种图片应用的优缺点
  9. eclipse无法弹出控制台
  10. 小学计算机教案 插入艺术字,小学信息技术《在幻灯片中插入艺术字》说课及反思...
  11. 企业认证CMMI都需要那些流程?
  12. 做人做事的艺术html,低姿态做人做事的艺术简介读后感,经典语录书评
  13. 对话 UNIX: 使用 Screen 创建并管理多个 shell
  14. 实战演练 Navicat 中英文模式切换
  15. Xv6 Operating System Organization
  16. HTML5网页在线代码编辑器源码 适用各类项目代码在线编辑
  17. post方式下载excel表格
  18. 深入浅出内存管理--内存管理区(Zone)
  19. RK3588-SDK下载
  20. Proe5.0 如何修补破面?

热门文章

  1. 语言模型自然语言处理[置顶] 哥伦比亚大学 自然语言处理 公开课 授课讲稿 翻译(四)...
  2. system pause in C#
  3. Delphi多线程编程中的技巧
  4. 旋转卡壳——模板(对踵点)
  5. 关于互联网技术基层绩效管理的一些思考
  6. 合并排序(C语言实现)
  7. AC日记——小书童——刷题大军 洛谷 P1926
  8. 前端技术学习之选择器(一)
  9. Oracle timestamp 转换 date
  10. 【百度地图API】如何制作班级地理通讯录?LBS通讯录