06-模型-模型成員

  1. 模型實例方法

    1. str:在將對象轉換成字符串時會被調用
    2. save():將模型對象保存到數據表中.
    3. delete()將模型類對象從數據表中刪除
  2. 模型類的屬性

    1. 屬性objects:管理器,是Manger類型的對象,用于與數據庫進行交互.
    2. 當沒有為模型類定義管理器時,Django會為模型類生成一個名為objects的管理器,自定義管理器后,Django不再生成默認管理器objects
    3. 為模型類BookInfo定義管理器books語法如下
      class BookInfo(models.Model):
      ...
      books = models.Manager()
      
  3. 管理器Manager

    1. 管理器是Django的模型進行數據庫操作的接口,Django應用的每個模型都擁有至少一個管理器
    2. Django支持自定義管理器類,繼承自models.Manager
    3. 自定義管理器類主要用于兩種情況(所以一般情況是不用自定義的.嗯嗯.!)
      1. 修改原始查詢集,重寫get_queryset()方法
        ##圖書管理器
        class BookInfoManager(models.Manager):
        def get_queryset(self):
            #默認查詢未刪除的圖書信息
            #調用父類的成員語法為:super(子類型, self).成員
            return super(BookInfoManager, self).get_queryset().filter(isDelete=False)
        
        1. 在模型類BookInfo中定義管理器
          class BookInfo(models.Model):
              ...
              books = BookInfoManager()
          
    2. 向管理器類中添加額外的方法,如創(chuàng)建對象(這里說到的名詞是添加額外,所以**父類的方法就必須繼承了**!!)
  1. 字段屬性和選項(在對應的model里面的具體的類,比如class BookInfo(models.Model))

    1. 模型類屬性命名限制:

      1. 不能是python的保留關鍵字
      2. 不允許使用連續(xù)的下劃線,這是有django的查詢方法決定的.
    2. 定義屬性時需要指定字段類型,通過字段類型的參數指定選項,語法如下:
      屬性=models.字段類型(選項)

    3. 字段類型

      1. AutoField 自動增長的IntegerField,通常不用指定,不指定時Django會自動創(chuàng)建屬性名為id的自動增長屬性
      2. BooleanField 布爾字段,值為True或False
      3. NullBooleanField 支持Null、True、False三種值
      4. CharField(max_length=字符長度) 字符串--參數max_length表示最大字符個數
      5. TextField 大文本字段,一般超過4000個字符時使用
      6. IntegerField 整數
      7. DecimalField(max_digits=None, decimal_places=None)
        1. 十進制浮點數
        2. 參數max_digits表示總位數
        3. 參數decimal_places表示小數位數
      8. FloatField 浮點數
      9. DateField[auto_now=False, auto_now_add=False]) 日期
        1. 參數auto_now表示每次保存對象時,自動設置該字段為當前時間,用于"最后一次修改"的時間戳,它總是使用當前日期,默認為false
        2. 參數auto_now_add表示當對象第一次被創(chuàng)建時自動設置當前時間,用于創(chuàng)建的時間戳,它總是使用當前日期,默認為false
        3. 參數auto_now_add和auto_now是相互排斥的,組合將會發(fā)生錯誤
      10. TimeField:時間,參數同DateField
      11. DateTimeField 日期時間,參數同DateField
      12. FileField:上傳文件字段
      13. ImageField:繼承于FileField,對上傳的內容進行校驗,確保是有效的圖片
    4. 選項

      1. null:如果為True,表示允許為空,默認值是False
      2. blank:如果為True,則該字段允許為空白,默認值是False
      3. 對比:null是數據庫范疇的概念,blank是表單驗證證范疇的
      4. db_column:字段的名稱,如果未指定,則使用屬性的名稱
      5. db_index:若值為True, 則在表中會為此字段創(chuàng)建索引,默認值是False
      6. default:默認值
      7. primary_key:若為True,則該字段會成為模型的主鍵字段,默認值是False,一般作為AutoField的選項使用
      8. unique:如果為True, 這個字段在表中必須有唯一值,默認值是False
    5. 關系字段類型

      1. 關系型數據庫的關系包括三種類型:
        1. ForeignKey:一對多,將字段定義在多的一端中
        2. ManyToManyField:多對多,將字段定義在兩端中
        3. OneToOneField:一對一,將字段定義在任意一端中
      2. 可以維護遞歸的關聯關系,使用'self'指定,詳見“自關聯”
      3. 由一到多的訪問語法:
        #對象.模型類小寫_set
        #例:
        bookinfo.heroinfo_set
        
      4. 由一到一的訪問語法
        #對象.模型類小寫
        #例:
        heroinfo.bookinfo
        
      5. 訪問關聯對象的id語法
        # 對象.屬性_id
        #例:
        heroinfo.book_id
        
    6. 元選項

      1. 數據表的默認名稱為
        #<app_name>_<model_name>
        #例:
        booktest_bookinfo
        
        在模型類中定義類Meta,用于設置元信息,如使用db_table自定義表的名字
  2. 在models.py底下,如果想在一些派生類里面自定義數據表名的話,可以

    1. 重新定義class Meta:
      db_table = 'bookinfo'
    2. 測試過后,
      1. 發(fā)現原來如果是使用自帶的ORM創(chuàng)建的數據表的名字應該是app_+這個派生類的名字
        1. 例如 booktest_bookinfo
        2. 現在就變成了 bookinfo
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容