摘要:今天介紹一下開(kāi)發(fā)中,定義模型時(shí)用到的相關(guān)字段類(lèi)型和字段選項(xiàng)。的實(shí)例是作為類(lèi)型保存到數(shù)據(jù)庫(kù)中的,默認(rèn)字符串的最大長(zhǎng)度是,但是可以使用參數(shù)指定最大長(zhǎng)度。浮點(diǎn)類(lèi)型,用中的實(shí)例表示整數(shù)類(lèi)型。關(guān)于的字段類(lèi)型和參數(shù)就先講到這里。
今天介紹一下django開(kāi)發(fā)中,定義模型時(shí)用到的相關(guān)字段類(lèi)型和字段選項(xiàng)。
先說(shuō)說(shuō)常用的字段類(lèi)型:
1) AutoField: 自增字段類(lèi)型,當(dāng)自定義自增類(lèi)型的id時(shí),可以使用此類(lèi)型;
2) BigAutoField: 64位的整數(shù)自增類(lèi)型;
3) BigIntegerField: 64位的整數(shù)類(lèi)類(lèi)型;
4) BinrayField: 字節(jié)類(lèi)型的二進(jìn)制數(shù)據(jù);
5) BooleanField: 布爾類(lèi)型;
6) CharField: 字符串類(lèi)型,使用時(shí)必須指定max_lenth這個(gè)參數(shù);
7) DateField: 日期類(lèi)型,在python中datetime.date的實(shí)例就相當(dāng)于該類(lèi)型。該類(lèi)型有兩個(gè)字段選項(xiàng)auto_now和auto_now_add需要說(shuō)一下。在django官方文檔中的說(shuō)明中,auto_now表示當(dāng)對(duì)象被保存后,該字段會(huì)自動(dòng)設(shè)置為當(dāng)前時(shí)間,適用于需要保存對(duì)象的最后修改時(shí)間的場(chǎng)景。auto_now_add表示當(dāng)對(duì)象第一次被創(chuàng)建后,該字段會(huì)自動(dòng)設(shè)置為當(dāng)前時(shí)間,適用于保存對(duì)象創(chuàng)建時(shí)間的場(chǎng)景。
8) DateTimeField: 時(shí)間類(lèi)型,在python中datetime.datetime的實(shí)例就相當(dāng)于該類(lèi)型。同樣的,這個(gè)字段中也有auto_now和aito_now_add這兩個(gè)參數(shù);
9) TimeField: 時(shí)間類(lèi)型,python中datetime.time的實(shí)例可以表示此類(lèi)型,
10) DecimalField: 數(shù)字類(lèi)型,python中的Decimal實(shí)例就相當(dāng)于此類(lèi)型。有兩個(gè)必須的參數(shù),max_digits表示數(shù)字整數(shù)部分和小數(shù)部
分共有多少位,decimal_places表示精度,即小數(shù)部分的位數(shù)
test_decimal = models.DecimalField(max_digits=5, decimal_places=2) # 3位整數(shù),2位小數(shù)
11) DurationField: 存儲(chǔ)時(shí)間段的類(lèi)型,即表示兩個(gè)時(shí)間的差值,在python中可以用timedelta表示;
12) EmailField: 一個(gè)字符串,但是會(huì)使用EmailValidator驗(yàn)證form中輸入的字符串是否符合郵件的格式;
13) FileField: 文件上傳類(lèi)型的字段,必須要有upload_to這個(gè)參數(shù),上傳的文件會(huì)保存在upload_to指定的路徑中
test_file1 = models.FileField(upload_to="uploads/") # 上傳的文件保存到uploads中 test_file2 = models.FileField(upload_to="uploads/%Y/%m/%d") # 上傳的文件保存到uploads/2018/08/18中
其中,upload_to的值還可以是一個(gè)回調(diào)函數(shù):
def func_file(instance, filename): return "user_{0}/{1}".format(instance.user.id, filename) test_file3 = models.FileField(upload_to=func_file)
14) ImageField: 圖片類(lèi)型的字段,可以用在使用頭像的場(chǎng)景中;與FileField一樣,它也有upload_to參數(shù),需要指定一個(gè)上傳的路徑。使用該字段時(shí),項(xiàng)目中需要安裝Pillow庫(kù)。ImageField的實(shí)例是作為varchar類(lèi)型保存到數(shù)據(jù)庫(kù)中的,默認(rèn)字符串的最大長(zhǎng)度是100,但是可以使用max_length參數(shù)指定最大長(zhǎng)度。
15) TextField: 文本類(lèi)型的字段,對(duì)于超出CharField類(lèi)型存儲(chǔ)范圍的數(shù)據(jù),可以定義為該類(lèi)型;
16) UUIDField: 使用python中UUID類(lèi)生成該字段的值,生成一個(gè)通用唯一的標(biāo)識(shí)符,該類(lèi)型可以代替自增id做主鍵
user_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
其中,default參數(shù)可以指定,uuid4是uuid的一個(gè)版本,即uuid的生成方式,還有其它的版本。
17) FloatField: 浮點(diǎn)類(lèi)型,用python中的float實(shí)例表示;
18) IntegerField: 整數(shù)類(lèi)型。
下面說(shuō)說(shuō)常用的字段選項(xiàng):
1)default: 該參數(shù)可以指定字段的默認(rèn)值,一般直接指定默認(rèn)值即可;但是,該參數(shù)的值還可以是一個(gè)函數(shù)名,可用于訂單號(hào)等特殊字符串的生成;用法如下:
def generate_order_id(): """ 此處可以編寫(xiě)生成訂單號(hào)的邏輯 """ ...... order_id = models.CharField(max_length=32, default=generate_order_id)
通過(guò)以上代碼,每創(chuàng)建模型中的一條數(shù)據(jù)時(shí),order_id就會(huì)根據(jù)你編寫(xiě)的邏輯自動(dòng)生成,這樣大大增加了字段值的靈活性;
2)primary_key: 如果參數(shù)值為T(mén)rue,表示指定該字段是主鍵;當(dāng)模型中沒(méi)有使用這個(gè)參數(shù)時(shí),django會(huì)自動(dòng)添加一個(gè)int型的自增id作為主鍵;
3)null: 如果參數(shù)值為T(mén)rue,該字段在數(shù)據(jù)庫(kù)中的值是NULL,該參數(shù)默認(rèn)值是False;
4)blank: 如果參數(shù)值是True,表示這個(gè)字段值在前端頁(yè)面的表單中允許填空值,注意與null的區(qū)別;
5)auto_now和auto_now_add在上面講解過(guò),這里不再說(shuō)明了;
6)choices: 該參數(shù)的值是一個(gè)可迭代的對(duì)象,看一下例子:
class UserModel(models.Model): user_type = ( (1, "中學(xué)生"), (2, "大學(xué)生"), (3, "研究生"), ) user_type = models.IntegerField(choices=user_type)
上面的代碼中,choices的值是一個(gè)元祖(當(dāng)然也可以是列表),在數(shù)據(jù)庫(kù)中存儲(chǔ)的形式是1、2、3,但是在前端表單中顯示的結(jié)果是中學(xué)生、大學(xué)生、研究生;一些表示類(lèi)型、愛(ài)好等具有分類(lèi)意義的字段時(shí)可以使用這個(gè)參數(shù);
7)help_text: 顯示在頁(yè)面表單中的一段說(shuō)明性文字,可以用于對(duì)該字段的解釋說(shuō)明;
8)verbose_name: 給字段指定一個(gè)更詳細(xì)的名字;ForeignKey、ManyToManyField 和OneToOneField,字段默認(rèn)的verbose_name值就是字段的名稱(chēng),如果顯式指定,只需寫(xiě)在第一個(gè)位置即可,如:
user = models.CharField("user_name", max_length=32)
user字段的verbose_name就是user_name;
當(dāng)字段是ForeignKey、ManyToManyField或者OneToOneField類(lèi)型時(shí),想使用這個(gè)參數(shù)必須加上verbose_name,如:
user = models.ForeignKey(UserModel, to_field="user_id", verbose_name="user_name")
因?yàn)楫?dāng)字段是ForeignKey、ManyToManyField或者OneToOneField這三種類(lèi)型時(shí),第一個(gè)參數(shù)必須是關(guān)聯(lián)的模型類(lèi);
9)unique: 如果值該參數(shù)為T(mén)rue,則數(shù)據(jù)庫(kù)中這個(gè)字段的值必須唯一,且不能為空;
10)db_index: 如果該字段值為T(mén)rue,則在數(shù)據(jù)庫(kù)中,將會(huì)在該字段上創(chuàng)建索引。
關(guān)于Field的字段類(lèi)型和參數(shù)就先講到這里。如果錯(cuò)誤之處,歡迎交流指正!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/42312.html
摘要:既然是數(shù)據(jù)驅(qū)動(dòng)的,首先就必須要有數(shù)據(jù)。也符合它用于查看數(shù)據(jù)的需求。說(shuō)明模板中的對(duì)象就是從中取出的數(shù)據(jù)。以的類(lèi)型存儲(chǔ)著所有數(shù)據(jù)。修改視圖接下來(lái)就是第二類(lèi)修改視圖了。其中的會(huì)將中的該字段設(shè)為類(lèi)型而則是帶有清除文件功能的類(lèi)型。 最近在學(xué)習(xí)Django,官方文檔介紹地十分詳細(xì)。但是大而全就難免會(huì)有些不夠速成,和我們這個(gè)浮躁的互聯(lián)網(wǎng)時(shí)代格格不入,所以我就整理了這個(gè)文檔。就像coolshell說(shuō)的...
摘要:雖然這是個(gè)很簡(jiǎn)單的應(yīng)用,但是希望大家可以動(dòng)手一起操作,從最簡(jiǎn)單的開(kāi)始上手學(xué)習(xí)如何使用這個(gè)框架。則是在和之間,負(fù)責(zé)響應(yīng)用戶(hù)操作,從中獲取數(shù)據(jù)進(jìn)行處理并返回到中。 showImg(https://segmentfault.com/img/bV66tE?w=728&h=410); 在第一篇教程發(fā)布之后差不多一個(gè)月的今天,終于完成了第二篇內(nèi)容,這個(gè)發(fā)布周期拖得實(shí)在是有點(diǎn)太長(zhǎng)了,我都覺(jué)得不好意思...
摘要:當(dāng)然還有其他高級(jí)的使用,日后再說(shuō)完整的用戶(hù)名郵箱聯(lián)系地址留言信息用戶(hù)留言信息使用之前已經(jīng)定義好了數(shù)據(jù)模型的字段元數(shù)據(jù)方法等。 前言 接續(xù)前文,上一篇文章主要涉及了 Django 項(xiàng)目的基礎(chǔ)配置等,這篇主要涉及數(shù)據(jù)庫(kù)相關(guān)的 ORM ,也就是 Django 中的 Model 的使用,MVT 三層之間的交互 教程基本都是東拼西湊的,防止有些東西表述不準(zhǔn)確,因?yàn)槲抑皩?xiě) JavaScript ...
摘要:在模型中添加是完全可選的,所有選項(xiàng)都不是必須的。一個(gè)模型的數(shù)據(jù)庫(kù)表名稱(chēng),由這個(gè)模型的應(yīng)用名和模型類(lèi)名稱(chēng)之間加上下劃線組成。使用來(lái)表示隨機(jī)排序。默認(rèn)值為這個(gè)選項(xiàng)為時(shí)可以對(duì)數(shù)據(jù)庫(kù)表進(jìn)行或刪除等操作。 Django模型理論知識(shí) 簡(jiǎn)介 Django模型所在的位置: URL--->視圖--->模型(mysql) 什么是模型: 模型就是數(shù)據(jù)的唯一的&權(quán)威的信息源 包含所存儲(chǔ)的詩(shī)句的必要字段和...
摘要:轉(zhuǎn)載說(shuō)明來(lái)源添加全文搜索功能入門(mén)一使用的工具是的開(kāi)源搜索框架,該框架支持搜索引擎,不用更改代碼,直接切換引擎,減少代碼量。修改如下添加修改為如下第二步在中修改引擎,如下第三步重建索引,在進(jìn)行搜索中文試試吧。 感覺(jué)網(wǎng)絡(luò)上關(guān)于Django全文搜索的中文文章太少,并且講的也不是很到位,就是簡(jiǎn)單介紹了怎么配置,并沒(méi)有說(shuō)這樣配置有什么用,所以依然很迷茫。所以希望我這篇文章能夠幫助到后來(lái)人。 轉(zhuǎn)...
閱讀 1405·2021-09-01 11:40
閱讀 4047·2021-08-05 10:03
閱讀 1024·2019-08-30 15:54
閱讀 2889·2019-08-29 12:53
閱讀 3260·2019-08-29 12:23
閱讀 995·2019-08-26 13:45
閱讀 2336·2019-08-26 10:41
閱讀 2600·2019-08-23 16:44