Django model中的内嵌类(Class Meta)

Django model中的内嵌类(Class Meta)

内嵌类的作用:通过内嵌类 class Meta 可以为你的 model 定义 “元数据”

class Book(models.Model):
    name = models.CharField(max_length=64)
    price = models.DecimalField(max_digits=5, decimal_place=2)
    ...
    # 定义内嵌类 class Meta
    class Meta:
        db_table = 'my_book'
		verbose_name = '书籍'
        verbose_name_pulral = verbose_name
        ...

注:定义model 元数据指:不是一个字段的任何数据,如下是一些可能用到的元数据

​ ”““ 没有一个选项是必需的. 是否添加 class Meta 到你的 model 完全是可选的 ””“

app_label

​ app_label这个选项只在一种情况下使用,就是你的模型类不在默认的应用(app)下的models.py文件中,这个时候就需要指定当前的 model 类 是哪个应用程序的。
如:你在其它地方写了一个模型类,而这个模型类对应的应用是 app01,则这个时候需要指定:

app_label = 'app01'

db_table

​ db_table就是用于自定义数据库表名

db_table = 'my_book'

db_tablespace

​ 表空间 ---- 有些数据库有数据库表空间,如:Oracle。可以通过 db_tablespace来指定这个模型类对应的数据库表放在哪个数据库表空间

get_latest_by

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

一个 DateField 或 DateTimeField 字段的名字. 若提供该选项, 该模块将拥有一个 get_latest() 函数以得到 "最新的" 对象(依据那个字段):

managed

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

默认值为True,这个选项为True时Django可以对数据库表进行 migrate或migrations、删除等操作(执行数据库迁移命令)。在这个时间Django将管理数据库中表的生命周期

如果为False的时候,不会对数据库表进行创建、删除等操作。可以用于现有表、数据库视图等,其他操作是一样的。

ordering

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

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

需要注意的是:不论使用了多少个字段排序,admin只使用第一个字段

permissions

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

要创建一个对象所需要的额外的权限. 如果一个对象有 admin 设置, 则每个对象的添加,删除和改变权限会人(依据该选项)自动创建.下面这个例子指定了一个附加权限

verbose_name

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

verbose_name = "book"

verbose_name_plural

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

verbose_name_plural = 'books'

若未提供该选项, Django 会使用 verbose_name + "s".

原文地址:https://www.cnblogs.com/chmily/p/11935057.html