2013-08-21 80 views
0

我有一個帶有ChoiceField和CharField的窗體。現在我想在選擇ChoiceField的特定選項(例如選項3)時啓用CharField。否則,CharField應該被禁用。Django Forms:En- /動態禁用Charfield

我ChoiceField

choices = (('1', 'some text',), 
      ('2', 'some text',), 
      ('3', 'some text',)) 

host = forms.ChoiceField(choices = choices) 

和簡單的CharField

hostAdress = forms.CharField() 

你有什麼想法,讓這種方式?

+0

你需要在前端使用javascript做到這一點 –

回答

0

您可以從禁用/隱藏char字段開始,使用javascript捕獲選擇框上的更改事件並更改該事件的charfield。例如:

$("#id_choice").change(function(eObj) { 
    $("#id_char").removeAttr("disabled"); 

這只是(使用jQuery),您需要確保再次禁用charfield如果選擇框未選中(不知道你是否允許這種行爲),你還需要一個實例如果您隱藏該字段並且不啓用/禁用它,則可以正確處理表單錯誤的顯示。

0

我會用jQuery這個。

$('your-select-input-selector').change(function() { 
    var bDisable = true; 
    if ($(this).val() == '3'): 
     bDisable = !bDisabled; 
    $('your-text-input-selector').prop('disabled', bDisable); 
}); 

您還需要處理,其中選擇輸入已經在價值3設置當您第一次加載頁面的情況。

+0

看起來很好。但我沒有太多的JavaScript經驗。我該如何應對字段名稱。我已經爲'your-select-input-selector'和'#hostAdress'爲'your-text-input-selector'嘗試了'#host',但我不會工作 – Bubbleboy

+0

遵循一些新手jQuery教程(讓你知道非常基礎)。然後,如果您使用類似於'{{form.as_table}}'的方式自動呈現模型表單,則Django已經負責爲您的字段賦予ID。基本上ID是'id_ ',即使您可以自定義它們。 –