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

動態(tài)設(shè)置django的model field的默認值操作步驟

 更新時間:2020年03月30日 10:55:19   作者:ly005  
這篇文章主要介紹了動態(tài)設(shè)置django的model field的默認值操作步驟,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

問題背景

django的model field需要動態(tài)設(shè)置默認值,具體案例如下:

原始代碼如下,model是Application,其中字段ignore_fort的默認值設(shè)置為False

class Application(TimestampedModel):
  name = models.CharField(max_length=255, null=True)
  ignore_fort = models.BooleanField(default=False)

然而現(xiàn)在有這樣一個需求:default需要根據(jù)某個變量ENV進行動態(tài)設(shè)置,如果ENV是UAT或者FAT(不區(qū)分大小寫,具體分支,比如uaT01也可以),則default設(shè)置為True,否則設(shè)置為False

首先想到的是如下代碼:

class Application(TimestampedModel):
  name = models.CharField(max_length=255, null=True)
  ignore_fort = models.BooleanField(default= 'UAT'in ENV.upper() or 'FAT' in ENV.upper())

通過python manage.py shell_plus啟動shell調(diào)試,發(fā)現(xiàn)如果ENV本來設(shè)置的是什么值,邏輯正確,如果在shell中修改ENV的值,則新建的model的ignore_fort值并不是根據(jù)當(dāng)前ENV值進行設(shè)置,而是保持原來的值,達不到需求。例如,ENV值本來設(shè)置為uat,那么新建app = Application(),print app.ignore_fort結(jié)果是True,修改ENV ENV = 'hhh',app1 = Application(); print app1.ignore_fort結(jié)果還是True,而我們需要的是False。

分析

官方描述如下:

The default value for the field. This can be a value or a callable object. If callable it will be called every time a new object is created.

如果想要在創(chuàng)建對象時動態(tài)修改default的值,需要用callable object,可以理解為函數(shù)調(diào)用?

上述代碼的default值并不是callable object,所以并不是在object創(chuàng)建時同臺更新。

解決方法

參考 正解如下,用一個函數(shù)調(diào)用實現(xiàn)callable object,進而實現(xiàn)動態(tài)跟新default

def get_default_ignore_fort():
  cur_env =ENV.upper()
  return any(i in cur_env for i in ('UAT', 'FAT'))


class Application(TimestampedModel):
  name = models.CharField(max_length=255, null=True)
  ignore_fort = models.BooleanField(default=get_default_ignore_fort)

補充知識:Django ModelChoiceField:過濾查詢集并將默認值設(shè)置為對象

我有一個Django Form類定義喜歡這個在Models:

class AccountDetailsForm(forms.Form):
  ...
  adminuser = forms.ModelChoiceField(queryset=User.objects.all())

這工作正常,但它有一些限制,我似乎不能解決:

(1)我想在查詢集上使用一個過濾器,基于傳遞給表單的變量accountid,如下所示:

User.objects.filter(account=accountid)

這不能在模型中工作,因為accountid不能作為一個變量傳遞,當(dāng)然。

因此,查詢集必須以某種方式在視圖中定義,但就我可以看到它是一個必需的字段在Form類。

(2)我想默認選擇AccountDetailsForm數(shù)據(jù)庫中的一個對象,我可以在視圖中選擇這樣:

User.objects.filter(account=accountid).filter(primary_user=1)

我試過指定adminuser作為默認值在窗體中,(它與其他標(biāo)準表單字段,如CharField工作):

adminuser = User.objects.filter(account=accountid).filter(primary_user=1)

...

form = AccountDetailsForm({'adminuser': adminuser})
return render_to_response('accounts/edit/accountdetails.html', 
{'form': form, 'account':account})

但沒有運氣。

我應(yīng)該使用除ModelChoiceField之外的其他方式給我這里需要的靈活性嗎?

謝謝。

覆蓋init方法并接受新的關(guān)鍵字參數(shù)

class AccountDetailsForm(forms.Form):
  ...
  adminuser = forms.ModelChoiceField(queryset=User.objects.all())
  def __init__(self, *args, **kwargs):
    accountid = kwargs.pop('accountid', None)
    super(AccountDetailsForm, self).__init__(*args, **kwargs)

    if accountid:
      self.fields['adminuser'].queryset = User.objects.filter(account=accountid)

form = AccountDetailsForm(accountid=3)

您可以隨時在視圖中手動設(shè)置選擇。

form = AccountDetailsForm()
form.fields['adminuser'].queryset = User.objects.filter(account=accountid)


警告:您不是通過將字典傳遞到您的示例中的表單來設(shè)置默認值。

你實際上創(chuàng)建了一個綁定表,可能觸發(fā)驗證和所有的爵士。

要設(shè)置默認值,use the initials argument.

form = AccountDetailsForm(initial={'adminuser':'3'})

翻譯自:這里

以上這篇動態(tài)設(shè)置django的model field的默認值操作步驟就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python求眾數(shù)問題實例

    python求眾數(shù)問題實例

    這篇文章主要介紹了python求眾數(shù)問題實例,包括文件的讀寫、字典的運用及數(shù)值的計算等技巧,需要的朋友可以參考下
    2014-09-09
  • Tensorflow的梯度異步更新示例

    Tensorflow的梯度異步更新示例

    今天小編就為大家分享一篇Tensorflow的梯度異步更新示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python遍歷數(shù)組的方法小結(jié)

    python遍歷數(shù)組的方法小結(jié)

    這篇文章主要介紹了python遍歷數(shù)組的方法,實例總結(jié)了兩種Python遍歷數(shù)組的技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • Python generator生成器和yield表達式詳解

    Python generator生成器和yield表達式詳解

    這篇文章主要介紹了Python generator生成器和yield表達式詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • python進階之協(xié)程你了解嗎

    python進階之協(xié)程你了解嗎

    這篇文章主要為大家詳細介紹了python進階之協(xié)程,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • Python Websocket服務(wù)端通信的使用示例

    Python Websocket服務(wù)端通信的使用示例

    這篇文章主要介紹了Python Websocket服務(wù)端通信的使用示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • python游戲開發(fā)之視頻轉(zhuǎn)彩色字符動畫

    python游戲開發(fā)之視頻轉(zhuǎn)彩色字符動畫

    這篇文章主要為大家詳細介紹了python游戲開發(fā)之視頻轉(zhuǎn)彩色字符動畫,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • 修改Pandas的行或列的名字(重命名)

    修改Pandas的行或列的名字(重命名)

    這篇文章主要介紹了修改Pandas的行或列的名字(重命名),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Python進階學(xué)習(xí)之你真的懂元組嗎?

    Python進階學(xué)習(xí)之你真的懂元組嗎?

    在我們學(xué)習(xí)python的過程中,對元組的介紹通常是成為”不可變的列表“,但是這其實并沒有完全的概括元組的功能。在本文中,我們將會介紹元組作為記錄的功能,話不多說我們開始吧
    2023-04-04
  • VSCode2022配置Python3.9.6的詳細教程

    VSCode2022配置Python3.9.6的詳細教程

    這篇文章主要介紹了VSCode2022配置Python3.9.6教程,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09

最新評論

色达县| 公主岭市| 平邑县| 吴旗县| 荆门市| 广德县| 广元市| 博乐市| 德惠市| 建湖县| 五家渠市| 牙克石市| 扬州市| 闽侯县| 慈利县| 环江| 二连浩特市| 孟连| 政和县| 东至县| 德惠市| 苗栗市| 静乐县| 清苑县| 祥云县| 梓潼县| 博爱县| 望奎县| 墨玉县| 股票| 西贡区| 临汾市| 嘉峪关市| 黄大仙区| 大庆市| 兰坪| 晋中市| 岐山县| 博罗县| 郁南县| 肇东市|