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

您的位置:首頁技術文章
文章詳情頁

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

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

再Django中,你可以把字符串形式的數值賦值給IntegerField,然后Django會默認把字符串轉換成int。

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

這對于很多網絡參數上傳的場景很不利,因為很多時候我們處于方便會將布爾型參數轉換成字符串形式來上傳。

一個典型的場景是在使用Swfit的Alamofire框架中的upload來上傳Multipartform時,由于form參數只能添加Data形式的參數,直接將Bool型轉化成Data會非常麻煩,帶來編碼類型的問題。

例如采用如下的方式進行轉化:

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

以這種形式上傳最后被django接收到時,這個字段的值會是'x00'(False)或者'x01'(True),導致編碼類型的錯誤。

所以一個較為方便的方法是將bool型變量轉化成字符串再上傳。

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

不過,這樣雖然避免了編碼問題,但是在后臺賦值時直接將這個字段賦給相應的BooleanField的話,會永遠是True(這是當然的,將字符串直接用bool()做強制類型轉換就會始終是True)。

一個妥協的辦法是現將得到的上傳的字符型字段轉換成Int,再賦值給BooleanField。

不過,這里要給大家介紹一種更加整潔,更加一勞永逸的辦法,就是我們來重定義BooleanField的行為,在為其復制時,自動將字符串以我們想要的規則轉換成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)

其中get_prep_value這個函數會在Django準備把字段的值寫入數據庫時調用。

補充知識:Dajango xadmin 設置只讀字段,設置BooleanField類型在頁面中的顯示位置

class MachineInfoAdmin(admin.ModelAdmin):

def get_readonly_fields(self, request, obj=None): ''' 重新定義此函數,限制普通用戶所能修改的字段 ''' 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自定義字段設置排序

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

三,設置BooleadnField 顯示和其他字段同列

1、

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

2、

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

以上這篇讓Django的BooleanField支持字符串形式的輸入方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Django
相關文章:
主站蜘蛛池模板: 一级毛片在线免费视频 | 一本久久道久久爱 | 久久99久久99精品免观看 | 午夜国产片 | 亚洲悠悠色综合中文字幕 | 一区二三国产 | 国产精品久久久久一区二区 | 三级欧美 | 久久成人网18网站 | 成年人免费小视频 | 久久综合一区二区三区 | 国产精品久久久久亚洲 | 一级午夜a毛片免费视频 | 国产成人一区二区三区免费观看 | 久久精品国产亚洲7777小说 | 日韩国产中文字幕 | 99久久免费午夜国产精品 | 欧美精品高清在线观看 | 一级毛片视屏 | 黄色a三级三级三级免费看 黄色a网 | 国内精品久久精品 | 美女福利视频午夜在线 | 99久久精品毛片免费播放 | 精品国产精品久久一区免费式 | 亚洲一区二区三区不卡在线播放 | 中文字幕在线视频在线看 | 亚洲伦 | 久久手机精品视频 | 久久国产精品歌舞团 | 日韩精品一区二区三区免费视频 | 手机看片日韩国产一区二区 | 亚洲免费三级 | 免费观看一级成人毛片软件 | 最新国产大片高清视频 | 毛片大全免费 | 国产精品亚洲四区在线观看 | 亚洲伊人色综合网站亚洲伊人 | 日本精品夜色视频一区二区 | 亚洲欧美成人在线 | 污美女网站www在线观看 | 夜夜爽影院 |