django中ORM模型常用的字段

模型常用屬性

常用字段:

Django中,定義了一些Field來(lái)與數(shù)據(jù)庫(kù)表中的字段類(lèi)型來(lái)進(jìn)行映射冀偶。以下將介紹那些常用的字段類(lèi)型臼朗。

AutoField:

映射到數(shù)據(jù)庫(kù)中是int類(lèi)型豹缀,可以有自動(dòng)增長(zhǎng)的特性藤巢。一般不需要使用這個(gè)類(lèi)型,如果不指定主鍵撵溃,那么模型會(huì)自動(dòng)的生成一個(gè)叫做id的自動(dòng)增長(zhǎng)的主鍵疚鲤。如果你想指定一個(gè)其他名字的并且具有自動(dòng)增長(zhǎng)的主鍵,使用AutoField也是可以的缘挑。

BigAutoField:

64位的整形集歇,類(lèi)似于AutoField,只不過(guò)是產(chǎn)生的數(shù)據(jù)的范圍是從1-9223372036854775807语淘。

BooleanField:

在模型層面接收的是True/False诲宇。在數(shù)據(jù)庫(kù)層面是tinyint類(lèi)型际歼。如果沒(méi)有指定默認(rèn)值,默認(rèn)值是None姑蓝。

CharField:

在數(shù)據(jù)庫(kù)層面是varchar類(lèi)型鹅心。在Python層面就是普通的字符串。這個(gè)類(lèi)型在使用的時(shí)候必須要指定最大的長(zhǎng)度纺荧,也即必須要傳遞max_length這個(gè)關(guān)鍵字參數(shù)進(jìn)去旭愧。

DateField:

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

  1. auto_now:在每次這個(gè)數(shù)據(jù)保存的時(shí)候客给,都使用當(dāng)前的時(shí)間用押。比如作為一個(gè)記錄修改日期的字段肢簿,可以將這個(gè)屬性設(shè)置為True靶剑。
  2. auto_now_add:在每次數(shù)據(jù)第一次被添加進(jìn)去的時(shí)候,都使用當(dāng)前的時(shí)間池充。比如作為一個(gè)記錄第一次入庫(kù)的字段桩引,可以將這個(gè)屬性設(shè)置為True

DateTimeField:

日期時(shí)間類(lèi)型收夸,類(lèi)似于DateField坑匠。不僅僅可以存儲(chǔ)日期,還可以存儲(chǔ)時(shí)間卧惜。映射到數(shù)據(jù)庫(kù)中是datetime類(lèi)型厘灼。這個(gè)Field也可以使用auto_nowauto_now_add兩個(gè)屬性。

TimeField:

時(shí)間類(lèi)型咽瓷。在數(shù)據(jù)庫(kù)中是time類(lèi)型设凹。在Python中是datetime.time類(lèi)型。

EmailField:

類(lèi)似于CharField茅姜。在數(shù)據(jù)庫(kù)底層也是一個(gè)varchar類(lèi)型闪朱。最大長(zhǎng)度是254個(gè)字符。

FileField:

用來(lái)存儲(chǔ)文件的钻洒。這個(gè)請(qǐng)參考后面的文件上傳章節(jié)部分奋姿。

ImageField:

用來(lái)存儲(chǔ)圖片文件的。這個(gè)請(qǐng)參考后面的圖片上傳章節(jié)部分素标。

FloatField:

浮點(diǎn)類(lèi)型称诗。映射到數(shù)據(jù)庫(kù)中是float類(lèi)型。

IntegerField:

整形头遭。值的區(qū)間是-2147483648——2147483647寓免。

BigIntegerField:

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

PositiveIntegerField:

正整形再榄。值的區(qū)間是0——2147483647狡刘。

SmallIntegerField:

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

PositiveSmallIntegerField:

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

TextField:

大量的文本類(lèi)型疾就。映射到數(shù)據(jù)庫(kù)中是longtext類(lèi)型澜术。

UUIDField:

只能存儲(chǔ)uuid格式的字符串。uuid是一個(gè)32位的全球唯一的字符串猬腰,一般用來(lái)作為主鍵鸟废。

URLField:

類(lèi)似于CharField,只不過(guò)只能用來(lái)存儲(chǔ)url格式的字符串姑荷。并且默認(rèn)的max_length是200盒延。


Field的常用參數(shù):

null:

如果設(shè)置為TrueDjango將會(huì)在映射表的時(shí)候指定是否為空鼠冕。默認(rèn)是為False添寺。在使用字符串相關(guān)的Field(CharField/TextField)的時(shí)候,官方推薦盡量不要使用這個(gè)參數(shù)懈费,也就是保持默認(rèn)值False计露。因?yàn)?code>Django在處理字符串相關(guān)的Field的時(shí)候,即使這個(gè)Fieldnull=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繁堡。如果你的FieldBooleanField沈善,那么對(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è)類(lèi)兔跌,叫做Meta勘高。然后在這個(gè)類(lèi)中添加一些類(lèi)屬性來(lái)控制模型的作用。比如我們想要在數(shù)據(jù)庫(kù)映射的時(shí)候使用自己指定的表名坟桅,而不是使用模型的名稱(chēng)华望。那么我們可以在Meta類(lèi)中添加一個(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類(lèi)中的一些常用配置進(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/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末痛单,一起剝皮案震驚了整個(gè)濱河市嘿棘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌旭绒,老刑警劉巖鸟妙,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異挥吵,居然都是意外死亡重父,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)忽匈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)房午,“玉大人,你說(shuō)我怎么就攤上這事丹允」幔” “怎么了袋倔?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)折柠。 經(jīng)常有香客問(wèn)我宾娜,道長(zhǎng),這世上最難降的妖魔是什么扇售? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任碳默,我火速辦了婚禮,結(jié)果婚禮上缘眶,老公的妹妹穿的比我還像新娘嘱根。我一直安慰自己,他們只是感情好巷懈,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布该抒。 她就那樣靜靜地躺著,像睡著了一般顶燕。 火紅的嫁衣襯著肌膚如雪凑保。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天涌攻,我揣著相機(jī)與錄音欧引,去河邊找鬼。 笑死恳谎,一個(gè)胖子當(dāng)著我的面吹牛芝此,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播因痛,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼婚苹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了鸵膏?” 一聲冷哼從身側(cè)響起膊升,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谭企,沒(méi)想到半個(gè)月后廓译,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡债查,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年非区,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片攀操。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡院仿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情歹垫,我是刑警寧澤剥汤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站排惨,受9級(jí)特大地震影響吭敢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜暮芭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一鹿驼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辕宏,春花似錦畜晰、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至聚假,卻和暖如春块蚌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背膘格。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工峭范, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瘪贱。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓纱控,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親政敢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子其徙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容