Django 3.1 Meta類

這篇博客會介紹可用的 Meta 選項。但
其實有蠻多平常不會用到的,不用太深入研究!
Meta類文檔

abstract
當在Meta類裡聲明,abstract = True時,那在進行資料庫遷移時並不會產生資料庫表 ! 俗稱 抽象基類

app_label
如果你定義了模型的App,那也沒有在(setting.py)裡的INSTALLED_APPS註冊,那就要聲明他是屬於哪個App應用的!

base_manager_name
管理器_base_manager的屬性名稱

db_table
資料庫表的名稱。如果沒有指定此選項,那默認會以App應用名_你的模型類名

db_tablespace
用於模型資料庫表空間名稱。
默認設置是DEFAULT_TABLESPACE。

default_manager_name
模型_default_manager管理器的名字

default_related_name
關聯對象使用的反向名稱,默認為<models_name>_set

get_latest_by
在Django當中提供了兩個管理器的方法latest、earliest
分別獲取一個最新的值以及最早的值
支援 DateField,DateTimeField、IntegerField。可排序的!

managed
默認為True。表示Django在遷移中會創建資料庫表!
如果為False,就不會創建資料庫表

order_with_respect_to
通常是用在Foreignkey(一對多中)
例如:一個問題有多個答案,那答案的順序也很重要

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_to,Django提供兩個方法來查看跟設置對象順序!
get_RELATED_order()、 set_RELATED_order()
RELATED是模型的名稱
那我們現在假設Question對象具有多個相關的Answer 對象,和Answer相關對象的主鍵

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

那也可以透過剛剛的主鍵列表來設置Question(對象)中Answer(對象)的順序

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

那相關對象還有兩種方法
get_next_in_order : 返回下一個值
get_previous_in_order : 返回上一個值

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

ordering
默認排序。
-代表降序,+代表升序

ordering = ['pub_date']  以 pub_date 進行升序
ordering = ['-pub_date'] 以 pub_date 進行降序
ordering = ['-pub_date', 'author'] 先以 pub_date 進行降序,再以 author 進行升序

permissions
格式是兩個元祖的列表或元組
創建此對象時可進入權限表的額外權限,將自動為每個模型創建添加,更改,刪除和查看權限。這個例子指定了一個額外的權限

permissions = [('can_deliver_pizzas', 'Can deliver pizzas')]

default_permissions
可以自定義此列表,如果你的應用不需要任何默認權限,可以將其設置為空列表。必須在模型創建之前(遷移前)在模型上指定它,以防止創建任何遺漏的權限。

proxy
如果 proxy = True,那就會視為代理模型

required_db_features
如果將此列表設置為[‘gis_enabled’],則僅在啟用GIS的數據庫上同步模型。在使用多個數據庫後端進行測試時,跳過某些模型也很有用。避免由於ORM無法處理而導致無法創建模型之間的關係。

required_db_vendor
目前Django支持的資料庫sqlite,postgresql,mysql,oracle

select_on_save
沒用的屬性…

indexes
在當前模型建立索引列表

unique_together
UniqueConstraint與constraints選項一起使用。
UniqueConstraint提供更多功能 。
unique_together將來可能不推薦使用。

index_together
indexes選項提供了更多功能。
index_together將來可能不推薦使用。

constraints
在模型上定義約束,每個列表就是一個約束。
下面定義的約束: age的年齡不能小於18

class Customer(models.Model):
    age = models.IntegerField()

    class Meta:
        constraints = [
            models.CheckConstraint(check=models.Q(age__gte=18), name='age_gte_18'),
        ]

verbose_name
給人類讀的名稱

verbose_name_plural
對象的複數名稱:
如果未指定,Django將使用verbose_name+ “s”。

label
唯讀,返回的是app_label.object_name
應用名.模型類名

label_lower.
唯讀,同上小寫的模型名

模型層的內容有很多,但有些其實不重要
那我們下篇博客見囉 ! !!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值