Django中的常用字段類型
1. 數值型
以下都是數值相關的,比如AutoField,它在MySQL中的類型為int(11),而BooleanField在MySQL中對應的類型是tinyint(1)
AutoField int(11)
自增主鍵,Django Model默認提供,可以被重寫。它的完整定義是id=models.AutoField(primary_key=True)
BooleanField tinyint(1)
布爾類型字段,一般用於記錄狀態標記
DecimalField decimal
開發對數據精度要求較高的業務時考慮使用,比如做支付相關,金融相關。定義時,需要指定到多少位,比如cash = models.DecimalField(max_digits=8, decimal_placee=2, default=0, verbose_name="消費金額")就是定義長度為8位、精度為2的數字。比方說,你想保存666.66這樣的數字那么你的max_digits就需要為5,decimal_places需要為2
值得注意的是,在Python中也要使用Decimal類型來轉換數據(from decimal import Decimal)
IntegerField int(11)
它同AutoField一樣,唯一的差別就是不自增
PositiveIntegerField
與IntegerField一樣,但只包含正整數
SmallIntegerField smallint
小整數時一般會用到
2. 字符型
以下這些字段都是用來存儲字符數據的,對應在MySQL中有兩種類型:longtext和varchar
除了TextField是longtext類型外,其他均屬於varchar類型。
CharField varchar
基礎的varchar類型
URLField
繼承自CharField,但是實現了對URL的特殊處理
UUIDField char(32)
除了在PostgreSQL中使用的是uuid類型外,在其他數據庫中均是固定長度char(32),用來存放生成的唯一id
EmailField
同URLField一樣,他繼承自CharField,多了對E-mail的特殊處理
FileField
同URLField一樣,它繼承自CharField,多了對文件的特殊處理。當你定義一個字段為FileField時,在admin部分展示時會自動生成一個可上傳文件的按鈕。
TextField longtext
一般用來存放大量文本內容,比如新聞正文、博客正文
ImageField
繼承自FileField,用來處理圖片相關的數據,在展示上會有所不同
3. 日期類型
以下都為日期類型,分別對應MySQL的date、datetime和time
DateField
DateTimeField
TimeField
4. 關系類型
這是關系型數據庫中比較重要的字段類型,用來關聯兩個表,具體如下:
ForeignKey
OneToOneField
ManyToManyField
Django中的常用字段參數
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 (日期)的聯合約束,比如我們需要一 天只能有一篇名為《Django》的文章,那么可以在定義title字段時配置參數: unique _for_date="created time"。
需要注意的是,這並不是數據庫層面的約束。
unique_ for_ month
針對月份的聯合約束
unique_ for_ year
針對年份的聯合約束。
verbose_ name
字段對應的展示文案。
validators
自定義校驗邏輯,同form類似