溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解Python Django模型

發布時間:2021-10-08 09:33:54 來源:億速云 閱讀:179 作者:iii 欄目:開發技術

這篇文章主要講解了“如何理解Python Django模型”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“如何理解Python Django模型”吧!

目錄
  • Django模型

    • 字段類型

    • 字段類型的參數

    • 外鍵

  • 總結

    Django模型

    Django的模型定義在models.py文件中。模型是MVT中的M,也相當于MVC中的M。

    在Django中,模型必須繼承自Model類。例如:

    from django.db import models
    # Create your models here.
    class BookInfo(models.Model):       # 一個模型類就會對應生成數據庫中的一張表
        """書籍模型"""  
        name = models.CharField(max_length=128, verbose_name='名稱')        # 類的屬性就是數據表中的字段。
        pub_date = models.DateField(verbose_name='發布日期',null=True)
        readcount = models.IntegerField(default=0, verbose_name='閱讀量')
        commentcount = models.IntegerField(default=0, verbose_name='評論量')
        is_delete = models.BooleanField(default=False, verbose_name='邏輯刪除')
        class Meta:     # class Meta是固定寫法
            db_table = 'bookinfo'      # 指明數據庫表名
            verbose_name = '圖書'       # 在admin站點中顯示的名稱

    注意

    1.模型類如果未指明表名,Django默認以小寫app應用名_小寫模型類名為數據庫表名,一般我們會通過db_table指明數據庫表名。

    2.django會為表創建自動增長的主鍵列,每個模型只能有一個主鍵列,如果使用選項設置某屬性為主鍵列后django不會再創建自動增長的主鍵列。默認創建的主鍵列屬性為id,也可以使用pk,意為primary key.

    3.字段名稱中不能出現雙下劃線,因為這是Django的查詢語法之一。

    自Django3.2后,可以在settings.py中配置DEFAULT_AUTO_FIELD參數來設置主鍵的數據類型,默認是DEFAULT_AUTO_FIELD = ‘django.db.models.BigAutoField',在Django3.2之前,默認生成的主鍵數據類型是AutoField.

    下面是Django中常用的字段類型的詳情

    字段類型

    類型說明
    BigAutoField自動增長的BigIntegerField,通常不用指定,不指定時Django會自動創建屬性名為id的自動增長屬性
    BooleanField布爾字段,值為True或False
    NullBooleanField支持Null、True、False三種值
    CharField字符串,參數max_length表示最大字符個數
    TextField大文本字段,一般超過4000個字符時使用
    IntegerField整數
    DecimalField十進制浮點數, 參數max_digits表示總位數, 參數decimal_places表示小數位數
    FloatField浮點數
    DateField日期, 參數auto_now表示每次保存對象時,自動設置該字段為當前時間,用于"最后一次修改"的時間戳,它總是使用當前日期,默認為False; 參數auto_now_add表示當對象第一次被創建時自動設置當前時間,用于創建的時間戳,它總是使用當前日期,默認為False; 參數auto_now_add和auto_now是相互排斥的,組合將會發生錯誤
    TimeField時間,參數同DateField
    DateTimeField日期時間,參數同DateField
    FileField上傳文件字段
    ImageField繼承于FileField,對上傳的內容進行校驗,確保是有效的圖片


    下面是字段類型中的參數

    字段類型的參數

    參數說明
    null如果為True,表示允許為空,默認值是False
    blank如果為True,則該字段允許為空白,默認值是False
    db_column字段的名稱,如果未指定,則使用屬性的名稱
    db_index若值為True, 則在表中會為此字段創建索引,默認值是False
    default為字段指定默認值
    primary_key若為True,則該字段會成為模型的主鍵字段,默認值是False,一般作為AutoField的選項使用
    unique如果為True, 這個字段在表中必須有唯一值,默認值是False
    choices該參數是從一系列的二元組中提供選項

    注意

    1.CharField字段必須要指定參數max_length

    2.還可以為字段指定參數verbose_name,這個參數主要是用來在admin管理頁面使用,其實是和本地化有關的。例如可以在上面的name字段指定參數verbose_name=“書籍名稱”,那么在admin管理頁面就會看到書籍名稱。

    3.null參數是數據庫層面的,設置null=True之后,表示數據庫的該字段可以為空;blank參數是表單層面(HTML),blank=True之后,表示表單填寫該字段的時候可以不填。

    外鍵

    外鍵這個東西,通常都是在業務邏輯層面來實現的,而不是在數據庫中實現。但是通常大家學習的數據庫課程中,都會有數據庫設計范式,其中有個第三范式就是專指的外鍵約束。在這里只是簡單的介紹一下。下面是另外一個模型,和前面的BookInfo模型通過外鍵關聯起來。

    class PeopleInfo(models.Model):
        """人員模型"""
        GENDER_CHOICES = (
            (0, 'male'),
            (1, 'female')
        )
        name = models.CharField(max_length=20, verbose_name='名稱')
        gender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbose_name='性別')
        description = models.CharField(max_length=200, null=True, verbose_name='描述信息')
        book = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbose_name='圖書')  # 外鍵
        is_delete = models.BooleanField(default=False, verbose_name='邏輯刪除')
        class Meta:
            db_table = 'peopleinfo'
            verbose_name = '人物信息'
    下面重點來說一下choices這個參數和models.ForeignKey。
    choices參數就是從我們定義的二元組(GENDER_CHOICES)中獲取值。二元組的第一個值會儲存在數據庫中,而第二個值將只會用于在表單中顯示。對于一個模型實例,要獲取該字段二元組中相對應的第二個值,使用 get_FOO_display() 方法。例如:獲取上面的性別信息,可以使用get_gender_display()方法。
    外鍵:通過使用models.ForeignKey來設置外鍵,ForeignKey的第一個參數是要關聯的模型類名,第二個參數是on_delete。它的常用值可以如下:
    CASCADE級聯,刪除主表數據時連通一起刪除外鍵表中數據
    PROTECT保護,通過拋出ProtectedError異常,來阻止刪除主表中被外鍵應用的數據
    SET_NULL設置為NULL,僅在該字段null=True允許為null時可用
    SET_DEFAULT設置為默認值,僅在該字段設置了默認值時可用
    SET()設置為特定值或者調用特定方法
    DO_NOTHING不做任何操作,如果數據庫前置指明級聯性,此選項會拋出IntegrityError異常

    注意:我們在數據庫中,設置外鍵的時候需要制定另一張表中關聯的字段,但是在Django里并沒有指定。這是因為Django會默認指定另外一張表的id作為關聯字段。如下圖所示:

    如何理解Python Django模型

    可以看到peopleinfo這張表中的外鍵名稱是book_id

    感謝各位的閱讀,以上就是“如何理解Python Django模型”的內容了,經過本文的學習后,相信大家對如何理解Python Django模型這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女