日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

django開發(fā)之model篇-Field類型講解

 風(fēng)清揚(yáng)r 2019-08-03

今天介紹一下django開發(fā)中,定義模型時(shí)用到的相關(guān)字段類型和字段選項(xiàng)。

先說說常用的字段類型:
1) AutoField: 自增字段類型,當(dāng)自定義自增類型的id時(shí),可以使用此類型;
2) BigAutoField: 64位的整數(shù)自增類型;
3) BigIntegerField: 64位的整數(shù)類類型;
4) BinrayField: 字節(jié)類型的二進(jìn)制數(shù)據(jù);
5) BooleanField: 布爾類型;
6) CharField: 字符串類型,使用時(shí)必須指定max_lenth這個(gè)參數(shù);
7) DateField: 日期類型,在python中datetime.date的實(shí)例就相當(dāng)于該類型。該類型有兩個(gè)字段選項(xiàng)auto_now和auto_now_add需要說一下。在django官方文檔中的說明中,auto_now表示當(dāng)對象被保存后,該字段會(huì)自動(dòng)設(shè)置為當(dāng)前時(shí)間,適用于需要保存對象的最后修改時(shí)間的場景。auto_now_add表示當(dāng)對象第一次被創(chuàng)建后,該字段會(huì)自動(dòng)設(shè)置為當(dāng)前時(shí)間,適用于保存對象創(chuàng)建時(shí)間的場景。
8) DateTimeField: 時(shí)間類型,在python中datetime.datetime的實(shí)例就相當(dāng)于該類型。同樣的,這個(gè)字段中也有auto_now和aito_now_add這兩個(gè)參數(shù);
9) TimeField: 時(shí)間類型,python中datetime.time的實(shí)例可以表示此類型,
10) DecimalField: 數(shù)字類型,python中的Decimal實(shí)例就相當(dāng)于此類型。有兩個(gè)必須的參數(shù),max_digits表示數(shù)字整數(shù)部分和小數(shù)部
分共有多少位,decimal_places表示精度,即小數(shù)部分的位數(shù)

1
test_decimal = models.DecimalField(max_digits=5, decimal_places=2)  # 3位整數(shù),2位小數(shù)

11) DurationField: 存儲(chǔ)時(shí)間段的類型,即表示兩個(gè)時(shí)間的差值,在python中可以用timedelta表示;
12) EmailField: 一個(gè)字符串,但是會(huì)使用EmailValidator驗(yàn)證form中輸入的字符串是否符合郵件的格式;
13) FileField: 文件上傳類型的字段,必須要有upload_to這個(gè)參數(shù),上傳的文件會(huì)保存在upload_to指定的路徑中

1
2
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ù):

1
2
3
4
def func_file(instance, filename):
    return 'user_{0}/{1}'.format(instance.user.id, filename)
     
test_file3 = models.FileField(upload_to=func_file)

14) ImageField: 圖片類型的字段,可以用在使用頭像的場景中;與FileField一樣,它也有upload_to參數(shù),需要指定一個(gè)上傳的路徑。使用該字段時(shí),項(xiàng)目中需要安裝Pillow庫。ImageField的實(shí)例是作為varchar類型保存到數(shù)據(jù)庫中的,默認(rèn)字符串的最大長度是100,但是可以使用max_length參數(shù)指定最大長度。
15) TextField: 文本類型的字段,對于超出CharField類型存儲(chǔ)范圍的數(shù)據(jù),可以定義為該類型;
16) UUIDField: 使用python中UUID類生成該字段的值,生成一個(gè)通用唯一的標(biāo)識符,該類型可以代替自增id做主鍵

1
user_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

其中,default參數(shù)可以指定,uuid4是uuid的一個(gè)版本,即uuid的生成方式,還有其它的版本。
17) FloatField: 浮點(diǎn)類型,用python中的float實(shí)例表示;
18) IntegerField: 整數(shù)類型。

下面說說常用的字段選項(xiàng):
1)default: 該參數(shù)可以指定字段的默認(rèn)值,一般直接指定默認(rèn)值即可;但是,該參數(shù)的值還可以是一個(gè)函數(shù)名,可用于訂單號等特殊字符串的生成;用法如下:

1
2
3
4
5
def generate_order_id():
   """ 此處可以編寫生成訂單號的邏輯 """
   ......
order_id = models.CharField(max_length=32, default=generate_order_id)

通過以上代碼,每創(chuàng)建模型中的一條數(shù)據(jù)時(shí),order_id就會(huì)根據(jù)你編寫的邏輯自動(dòng)生成,這樣大大增加了字段值的靈活性;
2)primary_key: 如果參數(shù)值為True,表示指定該字段是主鍵;當(dāng)模型中沒有使用這個(gè)參數(shù)時(shí),django會(huì)自動(dòng)添加一個(gè)int型的自增id作為主鍵;
3)null: 如果參數(shù)值為True,該字段在數(shù)據(jù)庫中的值是NULL,該參數(shù)默認(rèn)值是False;
4)blank: 如果參數(shù)值是True,表示這個(gè)字段值在前端頁面的表單中允許填空值,注意與null的區(qū)別;
5)auto_now和auto_now_add在上面講解過,這里不再說明了;
6)choices: 該參數(shù)的值是一個(gè)可迭代的對象,看一下例子:

1
2
3
4
5
6
7
class UserModel(models.Model):
    user_type = (
        (1, "中學(xué)生"),
        (2, "大學(xué)生"),
        (3, "研究生"),
    )
    user_type = models.IntegerField(choices=user_type)

上面的代碼中,choices的值是一個(gè)元祖(當(dāng)然也可以是列表),在數(shù)據(jù)庫中存儲(chǔ)的形式是1、2、3,但是在前端表單中顯示的結(jié)果是中學(xué)生、大學(xué)生、研究生;一些表示類型、愛好等具有分類意義的字段時(shí)可以使用這個(gè)參數(shù);
7)help_text: 顯示在頁面表單中的一段說明性文字,可以用于對該字段的解釋說明;
8)verbose_name: 給字段指定一個(gè)更詳細(xì)的名字;ForeignKey、ManyToManyField 和OneToOneField,字段默認(rèn)的verbose_name值就是字段的名稱,如果顯式指定,只需寫在第一個(gè)位置即可,如:

1
user = models.CharField("user_name", max_length=32)

user字段的verbose_name就是user_name;
當(dāng)字段是ForeignKey、ManyToManyField或者OneToOneField類型時(shí),想使用這個(gè)參數(shù)必須加上verbose_name,如:

1
user = models.ForeignKey(UserModel, to_field="user_id", verbose_name="user_name")

因?yàn)楫?dāng)字段是ForeignKey、ManyToManyField或者OneToOneField這三種類型時(shí),第一個(gè)參數(shù)必須是關(guān)聯(lián)的模型類;
9)unique: 如果值該參數(shù)為True,則數(shù)據(jù)庫中這個(gè)字段的值必須唯一,且不能為空;
10)db_index: 如果該字段值為True,則在數(shù)據(jù)庫中,將會(huì)在該字段上創(chuàng)建索引。

關(guān)于Field的字段類型和參數(shù)就先講到這里。如果錯(cuò)誤之處,歡迎交流指正!

原文地址:https://segmentfault.com/a/1190000016151866

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多