国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

讓Django的BooleanField支持字符串形式的輸入方式

瀏覽:10日期:2024-10-03 14:18:06

再Django中,你可以把字符串形式的數(shù)值賦值給IntegerField,然后Django會(huì)默認(rèn)把字符串轉(zhuǎn)換成int。

但是BooleanField則不行,BooleanField只能接受True和False,或者0和1(BTW:在python中True即是1,F(xiàn)alse即是0)。

這對(duì)于很多網(wǎng)絡(luò)參數(shù)上傳的場(chǎng)景很不利,因?yàn)楹芏鄷r(shí)候我們處于方便會(huì)將布爾型參數(shù)轉(zhuǎn)換成字符串形式來(lái)上傳。

一個(gè)典型的場(chǎng)景是在使用Swfit的Alamofire框架中的upload來(lái)上傳Multipartform時(shí),由于form參數(shù)只能添加Data形式的參數(shù),直接將Bool型轉(zhuǎn)化成Data會(huì)非常麻煩,帶來(lái)編碼類型的問(wèn)題。

例如采用如下的方式進(jìn)行轉(zhuǎn)化:

let dataToUpload = Data(bytes: boolVal, count: MemoryLayout<Bool>.size)

以這種形式上傳最后被django接收到時(shí),這個(gè)字段的值會(huì)是'x00'(False)或者'x01'(True),導(dǎo)致編碼類型的錯(cuò)誤。

所以一個(gè)較為方便的方法是將bool型變量轉(zhuǎn)化成字符串再上傳。

let toText = boolVal ? '1' : '0'form.append(toText.data(using: String.Encoding.utf8, allowLossyConversion: false)!, withName: key)

不過(guò),這樣雖然避免了編碼問(wèn)題,但是在后臺(tái)賦值時(shí)直接將這個(gè)字段賦給相應(yīng)的BooleanField的話,會(huì)永遠(yuǎn)是True(這是當(dāng)然的,將字符串直接用bool()做強(qiáng)制類型轉(zhuǎn)換就會(huì)始終是True)。

一個(gè)妥協(xié)的辦法是現(xiàn)將得到的上傳的字符型字段轉(zhuǎn)換成Int,再賦值給BooleanField。

不過(guò),這里要給大家介紹一種更加整潔,更加一勞永逸的辦法,就是我們來(lái)重定義BooleanField的行為,在為其復(fù)制時(shí),自動(dòng)將字符串以我們想要的規(guī)則轉(zhuǎn)換成Bool值。

代碼如下:

from django.db.models import BooleanField as _BooleanFieldclass BooleanField(_BooleanField): def get_prep_value(self, value):if value in ('0', 'false', 'False'): return Falseelif value in ('1', 'true', 'True'): return Trueelse: return super(BooleanField, self).get_prep_value(value)

其中g(shù)et_prep_value這個(gè)函數(shù)會(huì)在Django準(zhǔn)備把字段的值寫入數(shù)據(jù)庫(kù)時(shí)調(diào)用。

補(bǔ)充知識(shí):Dajango xadmin 設(shè)置只讀字段,設(shè)置BooleanField類型在頁(yè)面中的顯示位置

class MachineInfoAdmin(admin.ModelAdmin):

def get_readonly_fields(self, request, obj=None): ''' 重新定義此函數(shù),限制普通用戶所能修改的字段 ''' if request.user.is_superuser: self.readonly_fields = [] return self.readonly_fields readonly_fields = (’machine_ip’, ’status’, ’user’, ’machine_model’, ’cache’, ’cpu’, ’hard_disk’, ’machine_os’, ’idc’, ’machine_group’)

二,xadmin自定義字段設(shè)置排序

def identity(self,ext): return ext.user.get_types_display() identity.short_description=’身份’ # identity.admin_order_field = ’end_date’# 設(shè)置列表顯示字段list_display = [’name’, ’course_org’, ’detail’,’degree’,’learn_times’,’students’,’fav_nums’,’image’,’click_nums’,’add_time’]# 設(shè)置列表查詢字段search_field = [’name’, ’course_org’, ’detail’,’degree’,’learn_times’,’students’,’fav_nums’,’image’,’click_nums’]# 設(shè)置列表過(guò)濾字段list_filter = [’name’, ’course_org’, ’detail’,’degree’,’learn_times’,’students’,’fav_nums’,’image’,’click_nums’,’add_time’]# 設(shè)置顯示圖標(biāo)model_icon = ’fa fa-check-square’ # 設(shè)置字段可以直接在列表頁(yè)修改 list_editable=[’desc’,’degree’]# 設(shè)置默認(rèn)排序ordering=[’-click_nums’]# 設(shè)置詳情頁(yè)面只讀顯示readonly_fields=[’fav_nums’,’click_nums’]# 設(shè)置詳情頁(yè)面不顯示某個(gè)字段exclude=[’add_time’]#自動(dòng)刷新列表頁(yè)面(秒數(shù))refresh_times = [3,5]

三,設(shè)置BooleadnField 顯示和其他字段同列

1、

讓Django的BooleanField支持字符串形式的輸入方式

2、

讓Django的BooleanField支持字符串形式的輸入方式

以上這篇讓Django的BooleanField支持字符串形式的輸入方式就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Django
相關(guān)文章:
主站蜘蛛池模板: 99视频在线播放 | 成人毛片免费观看视频在线 | 高清一区在线 | 久久精品视频91 | a国产| a级特黄毛片免费观看 | 玖玖精品| 日韩在线欧美在线 | 亚洲高清免费视频 | 国产成人免费手机在线观看视频 | 国产一区二区三区精品久久呦 | a级日韩乱理伦片在线观看 a级特黄毛片免费观看 | 久久在线影院 | 国产成人午夜极速观看 | 国产成人综合精品 | 亚洲精品国产国语 | 欧美日韩国产亚洲一区二区三区 | 国产无毛 | 国产精品亚洲第五区在线 | 国产乱码精品一区二区三区中 | 操美国女人 | 久久天天躁综合夜夜黑人鲁色 | 国产毛片久久国产 | 成人网18免费网站在线 | 国产精品综合一区二区三区 | 国产杨幂福利在线视频观看 | 99ri在线精品视频在线播放 | 成人欧美一区二区三区在线观看 | 久久精品最新免费国产成人 | 韩国三级日本三级香港三级黄 | 亚洲爱爱天堂 | 国产美女自拍视频 | 国产一级一片免费播放i | 久久手机视频 | 日韩欧美理论片 | 色偷偷资源网 | 免费观看欧美一级牲片一 | 欧美一级爆毛片 | 俄罗斯毛片免费大全 | 97高清国语自产拍中国大陆 | 欧美操人 |