元數據:指的是除了字段以外的所有內容,這些內容不是必須的。
在Django ORM中實現元數據的定義只需要在模型類中添加一個Meta子類即可,然後就可以在該子類下增加各種元數據選項了。
下面列舉出常用的元數據選項:
class Books(models.Model):
"""圖書類"""
name = models.CharField(max_length=20)
price = models.PositiveSmallIntegerField()
word_num = models.PositiveIntegerField()
class Meta:
abstract = True # 當該參數設置爲True時表示該模型類是一個基類,提供給其他模型類繼承,因此該基類不會在數據庫中生成數據表。
app_label = "app_name" # 該參數是用於當我們沒有在INSTALLED_APPS中註冊app時,需要用該參數來說明該模型類屬於哪個app。
db_table = "books" # 該參數表示該模型類在數據庫中生成的數據表的表名。
get_latest_by = "price" # 該參數定義了當我們使用latest()和earliest()方法時是通過什麼字段來進行排序的。
managed = True # 該參數默認值爲True,表示Django將按照既定的規則,管理數據庫表的生命週期。如果設置爲False,將不會針對當前模型創建和刪除數據庫表.
ordering = ["price"] # 該參數表示按照什麼字段排序,目前表示按照price升序排序,如需要降序,則在字段名前加一個負號["-price"],同時可以添加多個排序選項,如["price", "word_num"]表示先按照price升序排序,然後price相同的再按照word_num升序排序。
permissions = (("allow_update", "允許更新圖書"),) # 該參數用於當創建對象時增加額外的權限。它接收一個所有元素都是二元元組的列表或元組,每個元素都是(權限代碼, 直觀的權限名稱)的格式
indexes = [models.Index(fields=['name', 'price']), ] # 該參數表示要在模型上定義的索引列表,用於在數據庫中創建索引。
unique_together = (("name", "price"),) # 該參數表示聯合唯一約束,參數值可以是一維的,也可以是二維的,我這裏是用二維的舉例,當前表示該表中不能出現name和price都相同的書籍出現,該參數可以設置多組聯合唯一約束,另外,如果約束只有一組的情況下可以用一維表示。
verbose_name = "圖書" # 該參數可以設置模型直觀的名稱,一般我們設置爲中文,如果不設置,那麼Django會默認使用小寫的模型名。
verbose_name_plural = verbose_name # 該參數是verbose_name的複數形式,由於中文沒有複數的概念,所以一般verbose_name_plural = verbose_name。
這裏只列舉出了部分常用的元數據,其他沒有列舉出來的都是使用頻率相當少的,可以到Django官網查看所有的元數據選項。
參考來源於:Django官方文檔(https://docs.djangoproject.com/zh-hans/2.1/ref/models/options/)和劉江的博客教程(http://www.liujiangblog.com/course/django/99)