Django ORM中經常使用的字段類型以及參數配置

1、數值型sql

  • AutoField對應int(11)。自增主鍵,Django Model默認提供,能夠被重寫。
  • BooleanField對應tinyint(1)。布爾類型字段,通常用於記錄狀態標記。
  • DecimalField對應decimal。開發對數據精準要求較高大的業務時考慮使用。好比:cash=models.DecimalField(max_length, decimal_places=2, default=0, verbose_name=「消費金額」),就是定義長度爲8位、精度位2位的數字,例如數字:666666.66。
  • IntergerField對應**int(11) **。同AutoField同樣,惟一的差異就是不自增。
  • PositiveIntegerField。同IntegerField,只包含正整數。
  • SmallIntegerField對應smallint。小整數時通常會用到。

2、字符型
django對應到Mysql中有兩種類型:longtext和varchar。數據庫

​ 除了TextField是longtest類型外,其餘屬於varchar類型。django

  • CharField對應varchar。基礎的varchar類型。
  • URLField.繼承自CharField,可是實現了對URL特特殊處理。用來存儲URL數據,非URL數據能夠在業務層就拒絕掉,不會存入數據庫中。
  • UUIDField對應char(32)。除了在PostgreSQL中使用的是uuid類型外,在其餘數據庫中均是固定長度char(32),用來存放生成的惟一id。
  • EmailField。同URLfield同樣繼承自CharField,多了對email的特殊處理。
  • FileField。同URLField同樣,它繼承自CharField,對了對文件的特殊處理。
  • TextField對應longtext。通常用於存放大量文本內容,好比新聞正文、博客正文。
  • ImageField。繼承自FileField,用來處理圖片相關的數據,在展現上會有所不一樣。

3、日期類型
django中有3中日期類型,分別對應Mysql的date、datetime和timepost

  • DateField對應date
  • DateTimeField對應datetime
  • TimeField對應time

4、關係類型ui

  • ForeignKey,外鍵
  • OneToOneField,一對一
  • ManyToManyField,多對多

5、參數
上面django所提供的字段都是類。spa

好比models.CharField的定義就是:class CharField:。orm

每一個字段裏面都提供了參數能夠選擇:繼承

  • null。能夠同blank進行對比。null用於設定在數據庫層面是否容許爲空
  • blank。針對業務層面,該值是否容許爲空。
  • choices。配置字段的choices後,在admin頁面上就能夠看到對應的可選項展現。
  • db_column。默認狀況下,定義的field就是對應數據庫中的字段名稱,經過這個參數能夠指定Model中的某個字段對應數據庫中的哪一個字段。
  • db_index。數據庫索引配置。
  • default。默認值配置。
  • editable。是否可編輯,默認是True。若是不想這個字段顯示在頁面上,能夠配置爲False。
  • error_messages。用來自定義字段值校驗失敗時的異常提示,它是字典格式。key的值可選項爲null、blank、invalid、invalid_choice、unique和unique_for_date。
  • help_text。字段提示語,配置這一項後,在頁面對應字段的下方會展現此配置。
  • primary_key。主鍵,一個Model只容許設置一個字段爲primary_key。
  • unique。惟一約束,當須要配置惟一值時,設置unique=True,設置此項後,不須要設置db_index。
  • unique_for_date。針對date(日期)的聯合約束。好比說一天只能寫一篇博文,即:unique_for_date=「博文」
  • unique_for_month。針對月份的聯合約束 。
  • unique_for_month。針對年份的聯合約束。
  • verbose_name。字段對應的展現文案。
  • validators。自定義校驗邏輯,同form相似。

關於Django字段類型中 blank和null的區別

blank

設置爲True時,字段能夠爲空。設置爲False時,字段是必須填寫的。字符型字段CharField和TextField是用空字符串來存儲空值的。索引

若是爲True,字段容許爲空,默認不容許。圖片

null

設置爲True時,django用Null來存儲空值。日期型、時間型和數字型字段不接受空字符串。因此設置IntegerField,DateTimeField型字段能夠爲空時,須要將blank,null均設爲True。

若是爲True,空值將會被存儲爲NULL,默認爲False。

若是想設置BooleanField爲空時能夠選用NullBooleanField型字段。

一句話歸納

  • null 是針對數據庫而言,若是 null=True, 表示數據庫的該字段能夠爲空。
  • blank 是針對表單的,若是 blank=True,表示你的表單填寫該字段的時候能夠不填,好比 admin 界面下增長 model 一條記錄的時候。直觀的看到就是該字段不是粗體
  • 通俗點說,該字段null=true後,你進行插入,修改操做時能夠爲空,而後Django把空值轉換成null存在數據庫中,而blank只是在表單驗證的時候會檢測你是否能夠爲空
相關文章
相關標籤/搜索