以下是我的表单的定义:
class WorkflowForm(forms.Form):
new_user = forms.BooleanField(required=False)
user = ModelChoiceField(queryset=User.objects.all())
description = forms.CharField(required=False, widget=forms.Textarea)
如果选中 new_user 字段,我想禁用用户 ModelChoiceField。
那么可以在这个类中定义一个字段与另一个字段的依赖关系,比如在我的情况下,modelchoicefield取决于是否选中了booleanfield?
答案 0 :(得分:4)
这是一个快速简单的,
<p>label for="id_new_user">New user:</label>
<input type="checkbox" name="new_user" id="id_new_user"
onclick="javascript:toggleDiv('user_choice');" checked/></p>
<p id="user_choice" style="display:none">
<label for="id_user">User:</label>
<select name="user" id="id_user">
<option value="" selected="selected">---------</option>
<option value="1">sam</option>
<option value="2">usertest</option>
</select>
<强> forms.py 强>
class WorkflowForm(forms.Form):
new_user = forms.BooleanField(required=False, initial=True)
user = ModelChoiceField(queryset=User.objects.all())
description = forms.CharField(required=False, widget=forms.Textarea)
def __init__(self, user, *args, **kwargs):
super(WorkflowForm, self).__init__(*args, **kwargs)
self.fields['user'].queryset = User.objects.all()
self.fields['user'].widget.attrs['style'] = 'display:none'
self.fields['user'].widget.attrs['id'] = 'user_choice'
self.fields['new_user'].widget.attrs['onclick'] = "javascript:toggleDiv('user_choice');"
<强>模板强>
{{form.as_p}}
<script>
function toggleDiv(divId) {
$("#"+divId).toggle(500);
}
</script>
答案 1 :(得分:0)
由于您的表单不是ModelForm,我假设您的意思是客户端:如果用户选中新用户复选框,则用户字段将被禁用。< / p>
你不能在Python方面做到这一点,因为它发生在浏览器中,而不是在服务器上。你需要使用javascript。使用jQuery的示例:
$(function() {
$('#check').click(function() {
var disable = $(this).is(':checked');
$('#choice').attr('disabled', disable);
});
});
祝你好运。