溫馨提示×

溫馨提示×

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

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

django中ORM模型常用的字段的使用方法

發(fā)布時間:2020-08-19 16:30:25 來源:腳本之家 閱讀:132 作者:小短腿電工 欄目:開發(fā)技術(shù)

與數(shù)據(jù)類型相關(guān)的字段

CharField
        作用:字符串字段, 用于較短的字符串.
        參數(shù):CharField 要求必須有一個參數(shù) maxlength, 用于從數(shù)據(jù)庫層和Django校驗層限制該字段所允許的最大字符數(shù).

IntegerField
       作用:用于保存一個整數(shù).

CommaSeparatedIntegerField
        作用:用于存放逗號分隔的整數(shù)值. 類似 CharField, 必須要有maxlength參數(shù).

FloatField
        作用:一個浮點數(shù),必須提供兩個參數(shù):        
        參數(shù):max_digits,總位數(shù)(不包括小數(shù)點和符號), decimal_places,小數(shù)位數(shù).
        示例1:要保存最大值為 999 (小數(shù)點后保存2位),你要這樣定義字段:
              models.FloatField(..., max_digits=5, decimal_places=2)
        示例2:要保存最大值一百萬(小數(shù)點后保存10位)的話,你要這樣定義: 
              models.FloatField(..., max_digits=19, decimal_places=10)
              admin 用一個文本框(<input type="text">)表示該字段保存的數(shù)據(jù)

與時間相關(guān)的字段

DateField
        一個日期字段. 共有下列額外的可選參數(shù):
        Argument    描述
        auto_now    當對象被保存時,自動將該字段的值設(shè)置為當前時間.通常用于表示 "last-modified" 時間戳.
        auto_now_add    當對象首次被創(chuàng)建時,自動將該字段的值設(shè)置為當前時間.通常用于表示對象創(chuàng)建時間.
        (僅僅在admin中有意義...) 

DateTimeField
         一個日期時間字段. 類似 DateField 支持同樣的附加選項.

與布爾值相關(guān)的字段

BooleanField
        A true/false field. admin用checkbox 來表示此類字段.

NullBooleanField
       類似 BooleanField, 不過允許 NULL 作為其中一個選項. 推薦使用這個字段而不要用 BooleanField 加 null=True 選項
       admin 用一個選擇框 <select> (三個可選擇的值: "Unknown", "Yes" 和 "No" ) 來表示這種字段數(shù)據(jù).

與校驗相關(guān)的字段

IPAddressField
        一個字符串形式的 IP 地址, (i.e. "24.124.1.30").

EmailField
        一個帶有檢查Email合法性的 CharField,不接受 maxlength 參數(shù).

XMLField
        一個校驗值是否為合法XML的 TextField,必須提供參數(shù): schema_path, 它是一個用來校驗文本的 RelaxNG schema #的文件系統(tǒng)路徑.

與上傳相關(guān)的字段

FileField
     作用:
          一個文件上傳字段,要求一個必須有的參數(shù)
     參數(shù):
          upload_to, 一個用于保存上載文件的本地文件系統(tǒng)路徑. 這個路徑必須包含 strftime #formatting,
          該格式將被上載文件的 date/time替換(so that uploaded files don't fill up the given directory).
     說明:
          admin 用一個<input type="file">部件表示該字段保存的數(shù)據(jù)(一個文件上傳部件) .

ImageField
     作用: 類似FileField,不過要校驗上傳對象是否是一個合法圖片.
     參數(shù): 它有兩個可選參數(shù):height_field和width_field, 如果提供這兩個參數(shù), 則圖片將按提供的高度和寬度規(guī)格保存.
注意事項:
     在一個model中使用FileField或ImageField需要以下步驟:
     (1)在你的settings文件中,定義一個完整路徑給MEDIA_ROOT以便讓Django在此處保存上傳文件.
          (出于性能考慮,這些文件并不保存到數(shù)據(jù)庫) 定義MEDIA_URL 作為該目錄的公共 URL.要確保該目錄對WEB服務(wù)器用戶帳號是可寫的.
     (2)在你的model中添加FileField或ImageField,并確保定義了upload_to選項,以告訴 Django使用MEDIA_ROOT的哪個子目錄保存上傳文件.
          你的數(shù)據(jù)庫中要保存的只是文件的路徑(相對于 MEDIA_ROOT).
          出于習慣你一定很想使用 Django 提供的 get_<#fieldname>_url 函數(shù).
          舉例來說,如果你的 ImageField叫作 mug_shot, 你就可以在模板中以 {{ object.#get_mug_shot_url }} 這樣的方式得到圖像的絕對路徑.

不好分類的字段

AutoField
        一個 IntegerField, 添加記錄時它會自動增長. 你通常不需要直接使用這個字段;
        自定義一個主鍵:my_id=models.AutoField(primary_key=True)
        如果你不指定主鍵的話,系統(tǒng)會自動添加一個主鍵字段到你的 model.

TextField
        一個容量很大的文本字段.
        admin 用一個 <textarea> (文本區(qū)域)表示該字段數(shù)據(jù).(一個多行編輯框).

URLField
      作用: 用于保存 URL, 若verify_exists參數(shù)為True(默認), 給定的 URL 會預先檢查是否存在( 即URL是否被有效裝入且沒有返回404響應(yīng)).
      admin 用一個 <input type="text"> 文本框表示該字段保存的數(shù)據(jù)(一個單行編輯框)

FilePathField

模型常用屬性

常用字段:

在 Django 中,定義了一些 Field 來與數(shù)據(jù)庫表中的字段類型來進行映射。以下將介紹那些常用的字段類型。會出現(xiàn)與上面重疊介紹。

AutoField:
映射到數(shù)據(jù)庫中是 int 類型,可以有自動增長的特性。一般不需要使用這個類型,如果不指定主鍵,那么模型會自動的生成一個叫做 id 的自動增長的主鍵。如果你想指定一個其他名字的并且具有自動增長的主鍵,使用 AutoField 也是可以的。

BigAutoField:
64位的整形,類似于 AutoField ,只不過是產(chǎn)生的數(shù)據(jù)的范圍是從 1-9223372036854775807 。

BooleanField:
在模型層面接收的是 True/False 。在數(shù)據(jù)庫層面是 tinyint 類型。如果沒有指定默認值,默認值是 None 。

CharField:
在數(shù)據(jù)庫層面是 varchar 類型。在 Python 層面就是普通的字符串。這個類型在使用的時候必須要指定最大的長度,也即必須要傳遞 max_length 這個關(guān)鍵字參數(shù)進去。

DateField:
日期類型。在 Python 中是 datetime.date 類型,可以記錄年月日。在映射到數(shù)據(jù)庫中也是 date 類型。使用這個 Field 可以傳遞以下幾個參數(shù):

  • auto_now :在每次這個數(shù)據(jù)保存的時候,都使用當前的時間。比如作為一個記錄修改日期的字段,可以將這個屬性設(shè)置為 True 。
  • auto_now_add :在每次數(shù)據(jù)第一次被添加進去的時候,都使用當前的時間。比如作為一個記錄第一次入庫的字段,可以將這個屬性設(shè)置為 True 。

DateTimeField:
日期時間類型,類似于 DateField 。不僅僅可以存儲日期,還可以存儲時間。映射到數(shù)據(jù)庫中是 datetime 類型。這個 Field 也可以使用 auto_now 和 auto_now_add 兩個屬性。

TimeField:
時間類型。在數(shù)據(jù)庫中是 time 類型。在 Python 中是 datetime.time 類型。

EmailField:
類似于 CharField 。在數(shù)據(jù)庫底層也是一個 varchar 類型。最大長度是254個字符。

FileField:
用來存儲文件的。這個請參考后面的文件上傳章節(jié)部分。

ImageField:
用來存儲圖片文件的。這個請參考后面的圖片上傳章節(jié)部分。

FloatField:
浮點類型。映射到數(shù)據(jù)庫中是 float 類型。

IntegerField:
整形。值的區(qū)間是 -2147483648——2147483647 。

BigIntegerField:
大整形。值的區(qū)間是 -9223372036854775808——9223372036854775807 。

PositiveIntegerField:
正整形。值的區(qū)間是 0——2147483647 。

SmallIntegerField:
小整形。值的區(qū)間是 -32768——32767 。

PositiveSmallIntegerField:
正小整形。值的區(qū)間是 0——32767 。

TextField:
大量的文本類型。映射到數(shù)據(jù)庫中是longtext類型。

UUIDField:
只能存儲 uuid 格式的字符串。 uuid 是一個32位的全球唯一的字符串,一般用來作為主鍵。

URLField:
類似于 CharField ,只不過只能用來存儲 url 格式的字符串。并且默認的 max_length 是200。

Field的常用參數(shù):
null:如果設(shè)置為 True , Django 將會在映射表的時候指定是否為空。默認是為 False 。在使用字符串相關(guān)的 Field (CharField/TextField)的時候,官方推薦盡量不要使用這個參數(shù),也就是保持默認值 False 。因為 Django 在處理字符串相關(guān)的 Field 的時候,即使這個 Field 的 null=False ,如果你沒有給這個 Field 傳遞任何值,那么 Django 也會使用一個空的字符串 "" 來作為默認值存儲進去。因此如果再使用 null=True , Django 會產(chǎn)生兩種空值的情形(NULL或者空字符串)。如果想要在表單驗證的時候允許這個字符串為空,那么建議使用 blank=True 。如果你的 Field 是 BooleanField ,那么對應(yīng)的可空的字段則為 NullBooleanField 。

blank:標識這個字段在表單驗證的時候是否可以為空。默認是False。這個和null是有區(qū)別的,null是一個純數(shù)據(jù)庫級別的。而blank是表單驗證級別的。db_column:這個字段在數(shù)據(jù)庫中的名字。如果沒有設(shè)置這個參數(shù),那么將會使用模型中屬性的名字。default:默認值??梢詾橐粋€值,或者是一個函數(shù),但是不支持lambda表達式。并且不支持列表/字典/集合等可變的數(shù)據(jù)結(jié)構(gòu)。primary_key:是否為主鍵。默認是False。unique:在表中這個字段的值是否唯一。一般是設(shè)置手機號碼/郵箱等。更多Field參數(shù)請參考官方文檔: https://docs.djangoproject.com/zh-hans/2.0/ref/models/fields/ 模型中Meta配置:對于一些模型級別的配置。我們可以在模型中定義一個類,叫做Meta。然后在這個類中添加一些類屬性來控制模型的作用。比如我們想要在數(shù)據(jù)庫映射的時候使用自己指定的表名,而不是使用模型的名稱。那么我們可以在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類中的一些常用配置進行解釋。db_table:這個模型映射到數(shù)據(jù)庫中的表名。如果沒有指定這個參數(shù),那么在映射的時候?qū)褂媚P兔麃碜鳛槟J的表名。ordering:設(shè)置在提取數(shù)據(jù)的排序方式。后面章節(jié)會講到如何查找數(shù)據(jù)。比如我想在查找數(shù)據(jù)的時候根據(jù)添加的時間排序,那么示例代碼如下:

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']

更多的配置后面會慢慢介紹到。 官方文檔: https://docs.djangoproject.com/en/2.0/ref/models/options/

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節(jié)

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

AI