django中ORM模型常用的字段的使用方法
與數(shù)據(jù)類型相關(guān)的字段
CharField
作用:字符串字段, 用于較短的字符串.
參數(shù):CharField 要求必須有一個(gè)參數(shù) maxlength, 用于從數(shù)據(jù)庫(kù)層和Django校驗(yàn)層限制該字段所允許的最大字符數(shù).
IntegerField
作用:用于保存一個(gè)整數(shù).
CommaSeparatedIntegerField
作用:用于存放逗號(hào)分隔的整數(shù)值. 類似 CharField, 必須要有maxlength參數(shù).
FloatField
作用:一個(gè)浮點(diǎn)數(shù),必須提供兩個(gè)參數(shù):
參數(shù):max_digits,總位數(shù)(不包括小數(shù)點(diǎn)和符號(hào)), decimal_places,小數(shù)位數(shù).
示例1:要保存最大值為 999 (小數(shù)點(diǎn)后保存2位),你要這樣定義字段:
models.FloatField(..., max_digits=5, decimal_places=2)
示例2:要保存最大值一百萬(wàn)(小數(shù)點(diǎn)后保存10位)的話,你要這樣定義:
models.FloatField(..., max_digits=19, decimal_places=10)
admin 用一個(gè)文本框(<input type="text">)表示該字段保存的數(shù)據(jù)
與時(shí)間相關(guān)的字段
DateField
一個(gè)日期字段. 共有下列額外的可選參數(shù):
Argument 描述
auto_now 當(dāng)對(duì)象被保存時(shí),自動(dòng)將該字段的值設(shè)置為當(dāng)前時(shí)間.通常用于表示 "last-modified" 時(shí)間戳.
auto_now_add 當(dāng)對(duì)象首次被創(chuàng)建時(shí),自動(dòng)將該字段的值設(shè)置為當(dāng)前時(shí)間.通常用于表示對(duì)象創(chuàng)建時(shí)間.
(僅僅在admin中有意義...)
DateTimeField
一個(gè)日期時(shí)間字段. 類似 DateField 支持同樣的附加選項(xiàng).
與布爾值相關(guān)的字段
BooleanField
A true/false field. admin用checkbox 來(lái)表示此類字段.
NullBooleanField
類似 BooleanField, 不過(guò)允許 NULL 作為其中一個(gè)選項(xiàng). 推薦使用這個(gè)字段而不要用 BooleanField 加 null=True 選項(xiàng)
admin 用一個(gè)選擇框 <select> (三個(gè)可選擇的值: "Unknown", "Yes" 和 "No" ) 來(lái)表示這種字段數(shù)據(jù).
與校驗(yàn)相關(guān)的字段
IPAddressField
一個(gè)字符串形式的 IP 地址, (i.e. "24.124.1.30").
EmailField
一個(gè)帶有檢查Email合法性的 CharField,不接受 maxlength 參數(shù).
XMLField
一個(gè)校驗(yàn)值是否為合法XML的 TextField,必須提供參數(shù): schema_path, 它是一個(gè)用來(lái)校驗(yàn)文本的 RelaxNG schema #的文件系統(tǒng)路徑.
與上傳相關(guān)的字段
FileField
作用:
一個(gè)文件上傳字段,要求一個(gè)必須有的參數(shù)
參數(shù):
upload_to, 一個(gè)用于保存上載文件的本地文件系統(tǒng)路徑. 這個(gè)路徑必須包含 strftime #formatting,
該格式將被上載文件的 date/time替換(so that uploaded files don't fill up the given directory).
說(shuō)明:
admin 用一個(gè)<input type="file">部件表示該字段保存的數(shù)據(jù)(一個(gè)文件上傳部件) .
ImageField
作用: 類似FileField,不過(guò)要校驗(yàn)上傳對(duì)象是否是一個(gè)合法圖片.
參數(shù): 它有兩個(gè)可選參數(shù):height_field和width_field, 如果提供這兩個(gè)參數(shù), 則圖片將按提供的高度和寬度規(guī)格保存.
注意事項(xiàng):
在一個(gè)model中使用FileField或ImageField需要以下步驟:
(1)在你的settings文件中,定義一個(gè)完整路徑給MEDIA_ROOT以便讓Django在此處保存上傳文件.
(出于性能考慮,這些文件并不保存到數(shù)據(jù)庫(kù)) 定義MEDIA_URL 作為該目錄的公共 URL.要確保該目錄對(duì)WEB服務(wù)器用戶帳號(hào)是可寫的.
(2)在你的model中添加FileField或ImageField,并確保定義了upload_to選項(xiàng),以告訴 Django使用MEDIA_ROOT的哪個(gè)子目錄保存上傳文件.
你的數(shù)據(jù)庫(kù)中要保存的只是文件的路徑(相對(duì)于 MEDIA_ROOT).
出于習(xí)慣你一定很想使用 Django 提供的 get_<#fieldname>_url 函數(shù).
舉例來(lái)說(shuō),如果你的 ImageField叫作 mug_shot, 你就可以在模板中以 {{ object.#get_mug_shot_url }} 這樣的方式得到圖像的絕對(duì)路徑.
不好分類的字段
AutoField
一個(gè) IntegerField, 添加記錄時(shí)它會(huì)自動(dòng)增長(zhǎng). 你通常不需要直接使用這個(gè)字段;
自定義一個(gè)主鍵:my_id=models.AutoField(primary_key=True)
如果你不指定主鍵的話,系統(tǒng)會(huì)自動(dòng)添加一個(gè)主鍵字段到你的 model.
TextField
一個(gè)容量很大的文本字段.
admin 用一個(gè) <textarea> (文本區(qū)域)表示該字段數(shù)據(jù).(一個(gè)多行編輯框).
URLField
作用: 用于保存 URL, 若verify_exists參數(shù)為True(默認(rèn)), 給定的 URL 會(huì)預(yù)先檢查是否存在( 即URL是否被有效裝入且沒(méi)有返回404響應(yīng)).
admin 用一個(gè) <input type="text"> 文本框表示該字段保存的數(shù)據(jù)(一個(gè)單行編輯框)
FilePathField
模型常用屬性
常用字段:
在 Django 中,定義了一些 Field 來(lái)與數(shù)據(jù)庫(kù)表中的字段類型來(lái)進(jìn)行映射。以下將介紹那些常用的字段類型。會(huì)出現(xiàn)與上面重疊介紹。
AutoField:
映射到數(shù)據(jù)庫(kù)中是 int 類型,可以有自動(dòng)增長(zhǎng)的特性。一般不需要使用這個(gè)類型,如果不指定主鍵,那么模型會(huì)自動(dòng)的生成一個(gè)叫做 id 的自動(dòng)增長(zhǎng)的主鍵。如果你想指定一個(gè)其他名字的并且具有自動(dòng)增長(zhǎng)的主鍵,使用 AutoField 也是可以的。
BigAutoField:
64位的整形,類似于 AutoField ,只不過(guò)是產(chǎn)生的數(shù)據(jù)的范圍是從 1-9223372036854775807 。
BooleanField:
在模型層面接收的是 True/False 。在數(shù)據(jù)庫(kù)層面是 tinyint 類型。如果沒(méi)有指定默認(rèn)值,默認(rèn)值是 None 。
CharField:
在數(shù)據(jù)庫(kù)層面是 varchar 類型。在 Python 層面就是普通的字符串。這個(gè)類型在使用的時(shí)候必須要指定最大的長(zhǎng)度,也即必須要傳遞 max_length 這個(gè)關(guān)鍵字參數(shù)進(jìn)去。
DateField:
日期類型。在 Python 中是 datetime.date 類型,可以記錄年月日。在映射到數(shù)據(jù)庫(kù)中也是 date 類型。使用這個(gè) Field 可以傳遞以下幾個(gè)參數(shù):
- auto_now :在每次這個(gè)數(shù)據(jù)保存的時(shí)候,都使用當(dāng)前的時(shí)間。比如作為一個(gè)記錄修改日期的字段,可以將這個(gè)屬性設(shè)置為 True 。
- auto_now_add :在每次數(shù)據(jù)第一次被添加進(jìn)去的時(shí)候,都使用當(dāng)前的時(shí)間。比如作為一個(gè)記錄第一次入庫(kù)的字段,可以將這個(gè)屬性設(shè)置為 True 。
DateTimeField:
日期時(shí)間類型,類似于 DateField 。不僅僅可以存儲(chǔ)日期,還可以存儲(chǔ)時(shí)間。映射到數(shù)據(jù)庫(kù)中是 datetime 類型。這個(gè) Field 也可以使用 auto_now 和 auto_now_add 兩個(gè)屬性。
TimeField:
時(shí)間類型。在數(shù)據(jù)庫(kù)中是 time 類型。在 Python 中是 datetime.time 類型。
EmailField:
類似于 CharField 。在數(shù)據(jù)庫(kù)底層也是一個(gè) varchar 類型。最大長(zhǎng)度是254個(gè)字符。
FileField:
用來(lái)存儲(chǔ)文件的。這個(gè)請(qǐng)參考后面的文件上傳章節(jié)部分。
ImageField:
用來(lái)存儲(chǔ)圖片文件的。這個(gè)請(qǐng)參考后面的圖片上傳章節(jié)部分。
FloatField:
浮點(diǎn)類型。映射到數(shù)據(jù)庫(kù)中是 float 類型。
IntegerField:
整形。值的區(qū)間是 -2147483648——2147483647 。
BigIntegerField:
大整形。值的區(qū)間是 -9223372036854775808——9223372036854775807 。
PositiveIntegerField:
正整形。值的區(qū)間是 0——2147483647 。
SmallIntegerField:
小整形。值的區(qū)間是 -32768——32767 。
PositiveSmallIntegerField:
正小整形。值的區(qū)間是 0——32767 。
TextField:
大量的文本類型。映射到數(shù)據(jù)庫(kù)中是longtext類型。
UUIDField:
只能存儲(chǔ) uuid 格式的字符串。 uuid 是一個(gè)32位的全球唯一的字符串,一般用來(lái)作為主鍵。
URLField:
類似于 CharField ,只不過(guò)只能用來(lái)存儲(chǔ) url 格式的字符串。并且默認(rèn)的 max_length 是200。
Field的常用參數(shù):
null:如果設(shè)置為 True , Django 將會(huì)在映射表的時(shí)候指定是否為空。默認(rèn)是為 False 。在使用字符串相關(guān)的 Field (CharField/TextField)的時(shí)候,官方推薦盡量不要使用這個(gè)參數(shù),也就是保持默認(rèn)值 False 。因?yàn)?Django 在處理字符串相關(guān)的 Field 的時(shí)候,即使這個(gè) Field 的 null=False ,如果你沒(méi)有給這個(gè) Field 傳遞任何值,那么 Django 也會(huì)使用一個(gè)空的字符串 "" 來(lái)作為默認(rèn)值存儲(chǔ)進(jìn)去。因此如果再使用 null=True , Django 會(huì)產(chǎn)生兩種空值的情形(NULL或者空字符串)。如果想要在表單驗(yàn)證的時(shí)候允許這個(gè)字符串為空,那么建議使用 blank=True 。如果你的 Field 是 BooleanField ,那么對(duì)應(yīng)的可空的字段則為 NullBooleanField 。
blank:標(biāo)識(shí)這個(gè)字段在表單驗(yàn)證的時(shí)候是否可以為空。默認(rèn)是False。這個(gè)和null是有區(qū)別的,null是一個(gè)純數(shù)據(jù)庫(kù)級(jí)別的。而blank是表單驗(yàn)證級(jí)別的。db_column:這個(gè)字段在數(shù)據(jù)庫(kù)中的名字。如果沒(méi)有設(shè)置這個(gè)參數(shù),那么將會(huì)使用模型中屬性的名字。default:默認(rèn)值。可以為一個(gè)值,或者是一個(gè)函數(shù),但是不支持lambda表達(dá)式。并且不支持列表/字典/集合等可變的數(shù)據(jù)結(jié)構(gòu)。primary_key:是否為主鍵。默認(rèn)是False。unique:在表中這個(gè)字段的值是否唯一。一般是設(shè)置手機(jī)號(hào)碼/郵箱等。更多Field參數(shù)請(qǐng)參考官方文檔: https://docs.djangoproject.com/zh-hans/2.0/ref/models/fields/ 模型中Meta配置:對(duì)于一些模型級(jí)別的配置。我們可以在模型中定義一個(gè)類,叫做Meta。然后在這個(gè)類中添加一些類屬性來(lái)控制模型的作用。比如我們想要在數(shù)據(jù)庫(kù)映射的時(shí)候使用自己指定的表名,而不是使用模型的名稱。那么我們可以在Meta類中添加一個(gè)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'
以下將對(duì)Meta類中的一些常用配置進(jìn)行解釋。db_table:這個(gè)模型映射到數(shù)據(jù)庫(kù)中的表名。如果沒(méi)有指定這個(gè)參數(shù),那么在映射的時(shí)候?qū)?huì)使用模型名來(lái)作為默認(rèn)的表名。ordering:設(shè)置在提取數(shù)據(jù)的排序方式。后面章節(jié)會(huì)講到如何查找數(shù)據(jù)。比如我想在查找數(shù)據(jù)的時(shí)候根據(jù)添加的時(shí)間排序,那么示例代碼如下:
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']
更多的配置后面會(huì)慢慢介紹到。 官方文檔: https://docs.djangoproject.com/en/2.0/ref/models/options/
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Python?NumPy如何使用argsort方法進(jìn)行排序
NumPy提供了各種功能強(qiáng)大的數(shù)組操作方法,其中之一就是argsort方法,本文將詳細(xì)介紹argsort方法的使用,以及如何在實(shí)際項(xiàng)目中充分利用它進(jìn)行排序操作,希望對(duì)大家有所幫助2024-03-03python中不能連接超時(shí)的問(wèn)題及解決方法
這篇文章主要介紹了python中不能連接超時(shí)的問(wèn)題及解決方法,需要的朋友可以參考下2018-06-06python實(shí)現(xiàn)簡(jiǎn)單的學(xué)生管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡(jiǎn)單的學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-02-02對(duì)python的文件內(nèi)注釋 help注釋方法
今天小編就為大家分享一篇對(duì)python的文件內(nèi)注釋 help注釋方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05Python使用Selenium實(shí)現(xiàn)模擬登錄的示例代碼
Selenium(本文基于python3.8)是一個(gè)功能強(qiáng)大的自動(dòng)化測(cè)試工具,它可以用于模擬用戶在瀏覽器中的行為,比如點(diǎn)擊、輸入、滾動(dòng)等等,本教程將詳細(xì)介紹如何使用Python編寫一個(gè)模擬登錄地爬蟲,使用XPath等多種元素匹配方法,需要的朋友可以參考下2023-08-08