這篇博客會介紹可用的 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.
唯讀,同上小寫的模型名
模型層的內容有很多,但有些其實不重要
那我們下篇博客見囉 ! !!