Available Meta options

abstract

如果为True,这个model就是抽象类

app_label

如果模型是在INSTALLED_APPS中的应用程序之外定义的,它必须声明它属于哪个应用程序

app_label = 'myapp'

base_manager_name

用于模型的_base_manager的管理器的名称。

db_table

用于模型的数据库表的名称

db_table = 'music_album'

db_tablespace

用于此模型的数据库表空间的名称。默认设置是项目的DEFAULT_TABLESPACE设置。如果后端不支持表空间,则忽略此选项。

default_manager_name

用于模型的_default_manager的管理器的名称。

default_related_name

默认情况下,从相关对象返回到此对象的关系将使用的名称。默认值是<model_name>_set。也可以通过models.ForeignKey()的related_name参数设置。

get_latest_by

根据给定的字段返回表中的最新对象。

# Latest by ascending order_date.
get_latest_by = "order_date" # Latest by priority descending, order_date ascending.
get_latest_by = ['-priority', 'order_date']

managed

默认为True,这意味着Django将在migrate中或作为迁移的一部分创建适当的数据库表,并将它们作为flush management命令的一部分删除。也就是说,Django负责管理数据库表的生命周期。

设置为False时,不会进行迁移。

order_with_respect_to

使该对象相对于给定字段(通常是一个外键)可排序。这可用于使相关对象相对于父对象可排序。例如,如果一个Answer与一个Question对象有关,并且一个Question有多个Answer,而且Answer的顺序很重要,那么您可以这样做:

from django.db import models

class Question(models.Model):
text = models.TextField()
# ... class Answer(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
# ... class Meta:
order_with_respect_to = 'question'

在设置order_with_respect t_to时,将提供另外两个方法来检索和设置相关对象的顺序:get_RELATED_order()和set_RELATED_order(),其中RELATED是小写的模型名称。例如,假设一个问题对象有多个相关的回答对象,返回的列表包含相关回答对象的主键:

>>> question = Question.objects.get(id=1)
>>> question.get_answer_order()
[1, 2, 3]

问题对象的相关回答对象的顺序可以通过传入一个回答主键列表来设置

>>> question.set_answer_order([3, 1, 2])

相关的对象还获得两个方法,get_next_in_order()和get_previous_in_order(),可以使用它们以正确的顺序访问这些对象。假设答案对象是按id排序的:

>>> answer = Answer.objects.get(id=2)
>>> answer.get_next_in_order()
<Answer: 3>
>>> answer.get_previous_in_order()
<Answer: 1>

在内部,order_with_respect t_to添加一个名为_order的额外字段/数据库列,并将模型的order选项设置为该字段。因此,order_with_respect t_to和order不能一起使用,而order_with_respect t_to添加的order将在您获得此模型的对象列表时应用。

Changing order_with_respect_to

因为order_with_respect t_to添加了一个新的数据库列,所以如果您在初始迁移之后添加或更改order_with_respect t_to,那么一定要进行并应用适当的迁移。

ordering

对象的默认顺序,用于获取对象列表

ordering = ['-order_date']

这是一个元组或列表。每个字符串都是一个字段名,具有可选的“-”前缀,表示降序。没有前导“-”的字段将按升序排列。用?随机排序。

您还可以使用查询表达式。要按作者升序排序并使null值最后排序,请使用这个

from django.db.models import F

ordering = [F('author').asc(nulls_last=True)]

permissions

创建此对象时进入权限表的额外权限。为每个模型自动创建添加、更改、删除和视图权限。这个例子指定了一个额外的权限can_deliver_pizzas

permissions = (("can_deliver_pizzas", "可提供pizza"),)

default_permissions

默认为('add', 'change', 'delete', 'view')。例如,如果您的应用程序不需要任何默认权限,您可以通过将该列表设置为空列表来定制该列表。迁移创建模型之前,必须在模型上指定它,以防止创建任何遗漏的权限。

proxy

如果proxy = True,子类化另一个模型的模型将被视为代理模型。

required_db_features

当前连接应该具有的数据库特性列表,以便在迁移阶段考虑模型。例如,如果您将这个列表设置为['gis_enabled'],那么模型将仅在启用gis的数据库上同步。在使用多个数据库后端进行测试时,跳过一些模型也很有用。避免模型之间的关系,因为ORM不处理这个问题,所以可能会创建模型,也可能不会创建模型。

required_db_vendor

此模型专用于的受支持的数据库供应商的名称。当前的内置厂商名称是:sqlite, postgresql, mysql, oracle。如果该属性不是空的,且当前连接供应商不匹配该属性,则模型将不会同步。

select_on_save

1.6版本前室友select检查更新

indexes

要在模型上定义的索引列表:

class Customer(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100) class Meta:
indexes = [
models.Index(fields=['last_name', 'first_name']),
models.Index(fields=['first_name'], name='first_name_idx'),
]

unique_together

字段名称集在一起必须是唯一的:

unique_together = (("driver", "restaurant"),)

unique_together在处理单个字段集时可以是单个元组:

unique_together = ("driver", "restaurant")

一个ManyToManyField不能包含在unique_together中。(现在还不清楚这意味着什么!)如果需要验证与ManyToManyField相关的唯一性,请尝试使用信号或显式通过模型。

违反约束时在模型验证过程中引发的验证错误包含unique_together错误代码。

index_together

推荐使用indexes

index_together = [
["pub_date", "deadline"],
]

在处理单个字段集时,index_together可以是单个列表:

index_together = ["pub_date", "deadline"]

verbose_name

对象的复数名称:

verbose_name_plural = "stories"

如果没有指定,django 将会使用verbo_name + "s"定义它

Read-only Meta attributes

label

对象的表示,返回app_label.object_name。例如:“polls.Question”。

label_lower

小写的label

如:“polls.QAuestion”。

Django Meta的更多相关文章

  1. Django——META内部类选项

    Django 模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.以下对此作一总结: abstract      这个属性是定义当前的模型类是不是一个抽象类.所谓抽象类是不会对应 ...

  2. Django Meta内部类选项

    http://blog.csdn.net/yelbosh/article/details/7545335

  3. Django实战(7):改造ProductList界面

    有了上一节关于Django模板的基础,改造界面就很容易理解了.将界面设计师设计的页面中的内容根据复用程度分别放到基础模板base.html和专用模板productlist.html中. depot/t ...

  4. Django model总结(上)

    Django model是django框架中处于比较核心的一个部位,准备分三个博客从不同的方面分别进行阐述,本文为<上篇>,主要对[a]Model的基本流程,比如它的创建,迁移等:默认行为 ...

  5. Django模型类Meta元数据详解

    转自:https://my.oschina.net/liuyuantao/blog/751337 简介 使用内部的class Meta 定义模型的元数据,例如: from django.db impo ...

  6. django model Meta选项

    可用的 Meta 选项 abstract Options.abstract 如果 abstract = True ,这个 model 就是一个 抽象基类 . app_label Options.app ...

  7. Django模型层Meta内部类详解

    Django 模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.以下对此作一总结: abstract      这个属性是定义当前的模型类是不是一个抽象类.所谓抽象类是不会对应 ...

  8. 学习django之构建Web是Meta嵌套类的几处使用

    Django中meta嵌套类的使用 1.模型中使用嵌套类 在定义抽象模型时如: class Meta : abstract=true 用来指明你创建的模型是一个抽象基础类的模型继承. 2.在一个对象对 ...

  9. Django model 中meta options之 abstract

    当abstract=True时,这个model就变成了abstrct base class,那这个基类有什么特性呢? 当某一model中设置了abstract=True时,就会使该model中的字段都 ...

随机推荐

  1. Windows下安装kibana

    1. 下载ElasticSearch https://www.elastic.co/downloads/kibana https://www.elastic.co/downloads/past-rel ...

  2. UNITY 带spriterender的对象导出为prefab时主贴图丢失的BUG

    从场景导出带有sprite的对象为prefab时贴图丢失的BUG.解决方案:对场景中每个sprite重新赋一下贴图,然后导出就好了,原因不明. 补充:这个有时候是因为贴图类型不是 2D AND UI ...

  3. Ubuntu 安装 kamailio

    首先安装前,你已经对kamailio的基本用法了解.可根据情况选择安装方式,本次安装基于Ubuntu18.04系统安装,对于16.04及一下会遇到版本问题,请自己查阅文档解决 安装第三方库 sudo ...

  4. Java Socket编程之TCP

    基于TCP的Socket通信: 服务器端: 创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口 调用accept()方法开始监听,等待客户端的连接 连接建立后,通过 ...

  5. SaltStack 的通讯及安全机制

    SaltStack 的通讯架构模型: Salt 采用服务端-代理的通讯模型(也可以通过 SSH 方式实现非代理模式).服务端称为 Salt master,代理端称为 Salt minion. Salt ...

  6. Miller-Rabin算法

    Miller-Rabin算法用于检测一个数n是否是素数.其时间复杂度上界为O(klog2(n)),其中k为检测的轮数.增大k可以提高Miller-Rabin算法的准确度. 要检测一个数是否为素数,简单 ...

  7. 为什么3D模型的网格由很多三角形来组成

    因为二点确定一条线,三点确定一个面 网格就是由很多面组成的,四个点也能组成面 但是三个点就足够了

  8. 671. Second Minimum Node In a Binary Tree 非递减二叉树中第二小的元素

    [抄题]: Given a non-empty special binary tree consisting of nodes with the non-negative value, where e ...

  9. 在 Windows Azure 上设计多租户应用程序

    作者:Suren Machiraju 和 Ralph Squillace 审校:Christian Martinez.James Podgorski.Valery Mizonov 和 Michael ...

  10. Mysql Join语法以及性能优化

    引言 内外联结的区别是内联结将去除所有不符合条件的记录,而外联结则保留其中部分.外左联结与外右联结的区别在于如果用A左联结B则A中所有记录都会保留在结果中,此时B中只有符合联结条件的记录,而右联结相反 ...