2014-03-31 85 views
0

我有以下forms.py與單選按鈕和其中的其他領域。基於單選按鈕的選擇,我應該啓用或禁用表單中的其他字段。django中的單選按鈕選擇功能表格

Forms.py

class SampleForm(forms.ModelForm): 
     option = forms.TypedChoiceField(choices=BoolChoices, widget=forms.RadioSelect(renderer=HorizontalRadioRenderer,attrs={'onchange':'check_status()'}), coerce=int,) 
     otherFields = forms.IntegerField(
      widget=forms.TextInput(attrs={'size': 7, 'disabled':True})) 
     ..... 
     ..... 
     class Meta: 
     model = Sample 
     class Media: 
      js = ('checkoption.js'), 

我的問題是我應該使用模板(擴展管理/ base_site.html)或者只是添加模板目錄下的myapp /模板/ MYAPP/template.html

在這種情況下,如果我使用以下template.html和views.py中

<form action="{% url myapp.views.check_option %}" method="POST">{% csrf_token %} 
{{ form_as_p }} 
<input id="submit" type="button" value="Click" /> 

def check_option(request): 
if request.method == 'GET': 
    form = SsmpleForm() 
else: 
    form = SampleForm(request.POST) 

if form.is_valid(): 
    opt = form.cleaned_data['option'] 
    if opt == 1: 
     form.fields['otherFields'].widget.attrs['enabled'] = True 
return render_to_response('verinc/template.html', {'form' : form,},context_instance=RequestContext(request)) 

現在如何將無線電選擇映射到這個視圖?有沒有其他的解決方案來設計這個任務在Django中。

嘗試與阿賈克斯

$(document).ready(function(){ 
function check_status(){ 
    $.get("{% url myapp.views.check_option %}", function(data){ 
     console.log(data); 
} 
} 
})(django.jQuery); 
+0

你是什麼意思由'如何*映射*無線電選擇到這個視圖?' –

+0

我的意思是,當單擊一個單選按鈕時調用在視圖中定義的函數check_option() – Ria

+0

'check_option'是視圖。它會在您提交表單時執行。 –

回答

0

嘗試看一看我給另一個問題的答案:How to render django form differently based on what user selects?

它處理了同樣的情況,而是chcekboxes它是一個下拉菜單。但那真的是無關緊要的。

的一點是:

的觀點應該定義窗體的行爲,而不是模板和JavaScript,它只能用於修改的東西都已經「允許」的觀點。

否則惡意用戶可能會使字段可見並在未經您的同意的情況下對其進行編輯,這可能會導致無法預料的結果。

但是您將能夠獲得正確的行爲,因爲表單將使用已給定的輸入進行重新填充。

您可以使用AJAX獲得一些無縫行爲,但過程將保持不變:SUbmit Form - > Call View - > Return rendered output。唯一不同的是,您將替換內聯表單而不是重新加載整個HTML頁面。