模型层Meta详解
作者:互联网
模型层Meta详解
在创建表时,我们可以添加Meta类,按照官方文档的解释,它是“anything that’s not a field”(除了字段的一切属性),用来配置一张表的其他参数。
1 Meta的使用
from django.db import models
class Ox(models.Model):
horn_length = models.IntegerField()
# 在类中嵌套定义Meta类,每条参数占用一行
class Meta:
verbose_name_plural = "oxen"
2 可选字段
1)abstract
abstract=True/False(默认)
当你想要抽象出一些共有的字段(比如说创建时间、名称、修改时间等),但又不希望为这些字段创建一张表,将其设置为True
class Basicfield(models.Model):
is_delete = models.BooleanField(default=0)
create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
last_update_time = models.DateTimeField(auto_now=True, verbose_name="修改时间")
class Meta:
abstract=True # 抽象表,数据库中不会建这张表
2)db_table
db_table = 'Table names'
Django在创建表时,默认会将app名和class类名通过下划线连接成为数据库的表名,For example, if you have an app bookstore
, a model defined as class Book
will have a database table named bookstore_book
.
如果想要覆盖这个名字,使用这个字段,并设置成你自定义的名称。
注意:
- 如果使用MariaDB、MySQL,强烈建议设置为小写英文
- 如果使用Oracle(表名有30字符限制),Django可能会自动缩减表名并将其全部变成大写,为了防止自动转换,使用带引号的名称来设置
db_table = '"name_left_in_lowercase"'
这样的引号也可以用在 Django 的其他支持的数据库,但是除了 Oracle,引号没有任何作用。
3)unique_together
对于单个字段的,可以直接在定义字段的时候设置unique=True,对于多个字段的唯一可以使用unique_together
unique_together = ['driver', 'restaurant'] # 单组字段直接用列表
unique_together = [['driver', 'restaurant'],['name','gender']] # 需要设置多组字段时,内部用列表分隔开
这表示这些字段在联合起来是唯一的。
注意:
- ManyToManyField不能被包含在其中,如果需要验证多对多字段的唯一性,可以考虑使用信号或者显式使用through。
- 可以在constraints约束参数中使用UniqueConstraint设置唯一约束,而unique_together可能会被废弃。
4)index_together
联合索引。
index_together = ["pub_date", "deadline"] # 单组字段直接用列表
index_together = [
["pub_date", "deadline"], # 需要设置多组字段时,内部用列表分隔开
]
注意:
- 可以使用另一个字段indexes设置联合索引,而index_together可能会被废弃。
5)verbose_name
一个更人性化的名字,适合阅读。
verbose_name = "pizza"
6)verbose_name_plural
复数形式的verbose_name。
verbose_name_plural = "stories"
如果不加该参数,默认会使用'verbose_name'+'s'
3 更多字段
有关更多的Meta字段,参阅官方文档:https://docs.djangoproject.com/en/3.2/ref/models/options/
标签:name,models,模型,together,字段,Meta,详解,verbose 来源: https://www.cnblogs.com/yyyzyyyz/p/15464298.html