Django Meta
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的更多相关文章
- Django——META内部类选项
Django 模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.以下对此作一总结: abstract 这个属性是定义当前的模型类是不是一个抽象类.所谓抽象类是不会对应 ...
- Django Meta内部类选项
http://blog.csdn.net/yelbosh/article/details/7545335
- Django实战(7):改造ProductList界面
有了上一节关于Django模板的基础,改造界面就很容易理解了.将界面设计师设计的页面中的内容根据复用程度分别放到基础模板base.html和专用模板productlist.html中. depot/t ...
- Django model总结(上)
Django model是django框架中处于比较核心的一个部位,准备分三个博客从不同的方面分别进行阐述,本文为<上篇>,主要对[a]Model的基本流程,比如它的创建,迁移等:默认行为 ...
- Django模型类Meta元数据详解
转自:https://my.oschina.net/liuyuantao/blog/751337 简介 使用内部的class Meta 定义模型的元数据,例如: from django.db impo ...
- django model Meta选项
可用的 Meta 选项 abstract Options.abstract 如果 abstract = True ,这个 model 就是一个 抽象基类 . app_label Options.app ...
- Django模型层Meta内部类详解
Django 模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.以下对此作一总结: abstract 这个属性是定义当前的模型类是不是一个抽象类.所谓抽象类是不会对应 ...
- 学习django之构建Web是Meta嵌套类的几处使用
Django中meta嵌套类的使用 1.模型中使用嵌套类 在定义抽象模型时如: class Meta : abstract=true 用来指明你创建的模型是一个抽象基础类的模型继承. 2.在一个对象对 ...
- Django model 中meta options之 abstract
当abstract=True时,这个model就变成了abstrct base class,那这个基类有什么特性呢? 当某一model中设置了abstract=True时,就会使该model中的字段都 ...
随机推荐
- ios开发中view.layer.shouldRasterize = YES 的使用说明
在做一个NavigationController push 子页面时,发现push和pop时很卡,研究了一大阵子后,发现在子页面里影响UI流畅的只有UIImageView的圆角设置:然后我就关闭了圆角 ...
- 遍历List集合时,删除数据的问题
一.问题描述 有时候,我们会遇到在遍历List集合的过程中删除数据的情况. 看着自己写的代码,感觉完全没有问题,但就是达不到预期的效果,这是为什么呢?下面我们来分析下 String str1 = ne ...
- NoSuchBeanDefinitionException:No qualifying bean of type found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency.
报错如下: NoSuchBeanDefinitionException:No qualifying bean of type found for dependency: expected at l ...
- Ant学习--简单实例入门
步骤1.创建工程文件夹名字 F:\Helloworld 步骤2.编写java代码: package com.netease; public class Ant_test { public static ...
- Spket,eclipse下安装Spket插件,格式化js
点击菜单 Help => Install New SoftWare => add 如图 name框输入:Skept Location框输入:http://www.agpad.com/upd ...
- redis 常用方法整理
1.进入redis redis-cli -p -h 192.168.0.100 -a q9pCeAEMAWEL 2.查询keys keys activity_mobile_* 3.赋值.查值.删除 s ...
- 关于@property与@syntheszie的使用问题
写在前面:在ARC大行其道的“现代化社会”,不少人不再对“完整的“OC”抱有它应该获得的尊重,于是浮躁成了代名词~~ 在使用ARC时,大家声明变量的过程中,往往使用@property来通过编译器,隐式 ...
- 解决git无法clone地址为https的库
一.问题描述 早上在学习<Spark快速大数据分析>的时候,需要下载书本的实例代码,于是用git clone一下给出的库: https://github.com/databricks/le ...
- c/c++笔试面试试题
C 试题(纯属转载) 1.求下面函数的返回值(微软) int func(x) { int countx = 0; while(x) { countx ++; ...
- 黑客攻击 UVa11825
http://www.cnblogs.com/acm-bingzi/p/3272898.html Hackers’ Crackdown Miracle Corporations has a numbe ...