最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年05月20日 09:17:27   作者:治部少輔  
這篇文章主要介紹了讓Django的BooleanField支持字符串形式的輸入方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

再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)換成字符串形式來上傳。

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

例如采用如下的方式進(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)

不過,這樣雖然避免了編碼問題,但是在后臺(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。

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

代碼如下:

from django.db.models import BooleanField as _BooleanField

class BooleanField(_BooleanField):  
  def get_prep_value(self, value):    
    if value in ("0", "false", "False"):      
      return False    
    elif value in ("1", "true", "True"):      
      return True    
    else:      
      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類型在頁面中的顯示位置

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è)置列表過濾字段
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è)置字段可以直接在列表頁修改 list_editable=['desc','degree']

# 設(shè)置默認(rèn)排序
ordering=['-click_nums']

# 設(shè)置詳情頁面只讀顯示
readonly_fields=['fav_nums','click_nums']

# 設(shè)置詳情頁面不顯示某個(gè)字段
exclude=['add_time']

#自動(dòng)刷新列表頁面(秒數(shù))
refresh_times = [3,5]

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

1、

2、

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

相關(guān)文章

  • Python實(shí)現(xiàn)將Excel內(nèi)容批量導(dǎo)出為PDF文件

    Python實(shí)現(xiàn)將Excel內(nèi)容批量導(dǎo)出為PDF文件

    這篇文章主要為大家介紹了如何利用Python實(shí)現(xiàn)將Excel表格內(nèi)容批量導(dǎo)出為PDF文件,文中的實(shí)現(xiàn)步驟講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-04-04
  • Python中添加搜索路徑的方法實(shí)例

    Python中添加搜索路徑的方法實(shí)例

    我們平時(shí)在用python寫一些腳本作為工具時(shí),經(jīng)常需要在其他腳本中加載該工具,這篇文章主要給大家介紹了關(guān)于Python中添加搜索路徑的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • 基于python實(shí)現(xiàn)ROC曲線繪制廣場(chǎng)解析

    基于python實(shí)現(xiàn)ROC曲線繪制廣場(chǎng)解析

    這篇文章主要介紹了基于python實(shí)現(xiàn)ROC曲線繪制廣場(chǎng)解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 利用Python簡(jiǎn)單的可視化工具

    利用Python簡(jiǎn)單的可視化工具

    這篇文章講述了數(shù)據(jù)可視化的必要性,介紹了幾種常用的Python可視化庫(kù)(Matplotlib、Seaborn、Plotly、GeoPandas、Folium),并通過實(shí)例展示了如何使用這些庫(kù)進(jìn)行圖表繪制和分析
    2025-01-01
  • django 解決擴(kuò)展自帶User表遇到的問題

    django 解決擴(kuò)展自帶User表遇到的問題

    這篇文章主要介紹了django 解決擴(kuò)展自帶User表遇到的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • pandas如何解決excel科學(xué)計(jì)數(shù)法問題

    pandas如何解決excel科學(xué)計(jì)數(shù)法問題

    這篇文章主要介紹了pandas如何解決excel科學(xué)計(jì)數(shù)法問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 集調(diào)試共享及成本控制Prompt工具PromptLayer使用指南

    集調(diào)試共享及成本控制Prompt工具PromptLayer使用指南

    這篇文章主要介紹了集調(diào)試共享及成本控制Prompt工具PromptLayer使用指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • 五分鐘帶你搞懂python 迭代器與生成器

    五分鐘帶你搞懂python 迭代器與生成器

    這篇文章主要介紹了python 迭代器與生成器的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-08-08
  • python opencv鼠標(biāo)畫矩形框之cv2.rectangle()函數(shù)

    python opencv鼠標(biāo)畫矩形框之cv2.rectangle()函數(shù)

    鼠標(biāo)操作屬于用戶接口設(shè)計(jì),以前一直使用Qt來做,但是如果只需要簡(jiǎn)單的鼠標(biāo),鍵盤操作,直接調(diào)用opencv庫(kù)的函數(shù)也未嘗不可,下面這篇文章主要給大家介紹了關(guān)于python opencv鼠標(biāo)畫矩形框cv2.rectangle()函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • python numpy之np.random的隨機(jī)數(shù)函數(shù)使用介紹

    python numpy之np.random的隨機(jī)數(shù)函數(shù)使用介紹

    這篇文章主要介紹了python numpy之np.random的隨機(jī)數(shù)函數(shù)使用介紹,需要的朋友可以參考下
    2019-10-10

最新評(píng)論

九江县| 启东市| 高淳县| 龙州县| 大荔县| 同心县| 皋兰县| 嘉峪关市| 陵水| 甘洛县| 通城县| 石狮市| 卢龙县| 德格县| 阿拉善左旗| 什邡市| 仙游县| 盈江县| 三门县| 阳泉市| 比如县| 和林格尔县| 镇安县| 平塘县| 通化市| 万山特区| 全南县| 渭源县| 汝州市| 二手房| 兴化市| 慈利县| 麦盖提县| 汾西县| 九江县| 钟山县| 油尖旺区| 蓝山县| 那坡县| 西昌市| 伊宁县|