在django
中,定義了一些field
來與資料庫表中的字段型別來進行對映。以下將介紹那些常用的字段型別。
對映到資料庫中是int
型別,可以有自動增長的特性。一般不需要使用這個型別,如果不指定主鍵,那麼模型會自動的生成乙個叫做id
的自動增長的主鍵。如果你想指定乙個其他名字的並且具有自動增長的主鍵,使用autofield
也是可以的。
64位的整形,類似於autofield
,只不過是產生的資料的範圍是從1-9223372036854775807
。
在模型層面接收的是true/false
。在資料庫層面是tinyint
型別。如果沒有指定預設值,預設值是none
。
在資料庫層面是varchar
型別。在python
層面就是普通的字串。這個型別在使用的時候必須要指定最大的長度,也即必須要傳遞max_length
這個關鍵字引數進去。
日期型別。在python
中是datetime.date
型別,可以記錄年月日。在對映到資料庫中也是date
型別。使用這個field
可以傳遞以下幾個引數:
auto_now
:在每次這個資料儲存的時候,都使用當前的時間。比如作為乙個記錄修改日期的字段,可以將這個屬性設定為true
。
auto_now_add
:在每次資料第一次被新增進去的時候,都使用當前的時間。比如作為乙個記錄第一次入庫的字段,可以將這個屬性設定為true
。
auto_now無論是你新增還是修改物件,時間為你新增或者修改的時間。
4 auto_now_add為新增時的時間,更新物件時不會有變動。
日期時間型別,類似於datefield
。不僅僅可以儲存日期,還可以儲存時間。對映到資料庫中是datetime
型別。這個field
也可以使用auto_now
和auto_now_add
兩個屬性。
時間型別。在資料庫中是time
型別。在python
中是datetime.time
型別。
類似於charfield
。在資料庫底層也是乙個varchar
型別。最大長度是254個字元。
用來儲存檔案的。
用來儲存檔案的
浮點型別。對映到資料庫中是float
型別。
整形。值的區間是-2147483648——2147483647
。
大整形。值的區間是-9223372036854775808——9223372036854775807
。
正整形。值的區間是0——2147483647
。
小整形。值的區間是-32768——32767
。
正小整形。值的區間是0——32767
。
大量的文字型別。對映到資料庫中是longtext型別。
只能儲存uuid
格式的字串。uuid
是乙個32位的全球唯一的字串,一般用來作為主鍵。
類似於charfield
,只不過只能用來儲存url
格式的字串。並且預設的max_length
是200。
如果設定為true
,django
將會在對映表的時候指定是否為空。預設是為false
。在使用字串相關的field
(charfield/textfield)的時候,官方推薦盡量不要使用這個引數,也就是保持預設值false
。因為django
在處理字串相關的field
的時候,即使這個field
的null=false
,如果你沒有給這個field
傳遞任何值,那麼django
也會使用乙個空的字串""
來作為預設值儲存進去。因此如果再使用null=true
,django
會產生兩種空值的情形(null或者空字串)。如果想要在表單驗證的時候允許這個字串為空,那麼建議使用blank=true
。如果你的field
是booleanfield
,那麼對應的可空的字段則為nullbooleanfield
。
標識這個欄位在表單驗證的時候是否可以為空。預設是false
。
這個和null
是有區別的,null
是乙個純資料庫級別的。而blank
是表單驗證級別的。
這個欄位在資料庫中的名字。如果沒有設定這個引數,那麼將會使用模型中屬性的名字。
預設值。可以為乙個值,或者是乙個函式,但是不支援lambda
表示式。並且不支援列表/字典/集合等可變的資料結構。
是否為主鍵。預設是false
。
在表中這個欄位的值是否唯一。一般是設定手機號碼/郵箱等。
更多field
引數請參考官方文件:
對於一些模型級別的配置。我們可以在模型中定義乙個類,叫做meta
。然後在這個類中新增一些類屬性來控制模型的作用。比如我們想要在資料庫對映的時候使用自己指定的表名,而不是使用模型的名稱。那麼我們可以在meta
類中新增乙個db_table
的屬性。示例**如下:
class
book
(models.model)
: name = models.charfield(max_length=
20,null=
false
) desc = models.charfield(max_length=
100,name=
'description'
,db_column=
"description1"
)class
meta
: db_table =
'book_model'
以下將對meta
類中的一些常用配置進行解釋。
這個模型對映到資料庫中的表名。如果沒有指定這個引數,那麼在對映的時候將會使用模型名來作為預設的表名。
設定在提取資料的排序方式。後面章節會講到如何查詢資料。比如我想在查詢資料的時候根據新增的時間排序,那麼示例**如下:
class
book
(models.model)
: name = models.charfield(max_length=
20,null=
false
) desc = models.charfield(max_length=
100,name=
'description'
,db_column=
"description1"
) pub_date = models.datetimefield(auto_now_add=
true
)class
meta
: db_table =
'book_model'
ordering =
['pub_date'
]
更多的配置後面會慢慢介紹到。 django官方文件: Django 模型(資料庫)
1.新建專案和應用 django admin.py startproject learn models 新建乙個專案 cd learn models 進入到該項目的資料夾 2.新增應用 django.contrib.admin django.contrib.auth django.contrib.c...
Django模型資料庫配置
在虛擬開發環境中,安裝mysql的資料庫驅動mysqlclient pip install mysqlclient在項 的 settings.py 件中找到databases 配置項,將其資訊修改為 databases 屬性定義語法為 屬性 models.欄位型別 選項 屬性命名規則 autofie...
Django的資料庫 和 模型
安裝 pymysql包 安裝 mysql 客戶端 非必須 sudo pip3 install mysqlclient 建立 和 配置資料庫 建立資料庫 create database mywebdb default charset utf8 collate utf8 general ci 資料庫的配...