1. 程式人生 > >Django模型之內建類Class Meta

Django模型之內建類Class Meta

Class Meta 作用:使用內部類來提供一些metadata,以下列舉一些常用的meta:
1,abstract:如下段程式碼所示,將abstract設定為True後,CommonInfo無法作為一個普通的Django模型,而是作為一個抽象基類存在,作用 是為其他的類提供一些公有的屬性。如Student會擁有三個屬性,即name,age,home_group。利於公用資訊的分解,避免重複編碼。

from django.db import models

class CommonInfo(models.Model):
    name = models.CharField(max_length=100)
    age = models.PositiveIntegerField()

    class Meta:
        abstract = True

class Student(CommonInfo):
    home_group = models.CharField(max_length=5)

2,db_table:用來指定model對應的資料庫中的表名,建議的格式為“this_is_table_name”,即小寫加下劃線的格式。若不指定也可 以,Django會自動生成相應的表名,但是,自動生成的表名的可讀性就不能夠保證了。
3,ordering:排序操作,例如我們需要根據date欄位來進行升序排列,則為ordering=['date'],若為降序排列,則設定為ordering=['-date'],應該注意到的是,ordering是個列表的表現形式,說明是可以接其他欄位的,比如ordering=['-date','name'],則表示先按date進行降序排列,再按名字進行升序排列。雖然個人不建議使用ordering,但誰讓Django提供了呢。。。
4,unique_together:在資料進行寫表操作的時候,我們往往會遇到兩個欄位組合起來需要唯一的情況,例如IP和port,往往是唯一存在的,這個時候,unique_together就很有用了,可以設定成 unique_together = (("ip", "port"),)

當然了,若該model中只有這兩個欄位需要做唯一性驗證,也可以使用單個元組進行設定,即unique_together =("ip", "port"),是不是很靈活?