Django ORM中的元數據Meta

元數據:指的是除了字段以外的所有內容,這些內容不是必須的。

在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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章