5

これが私のフォームの定義です:

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を無効にしたいと思います。

私の場合のように、このクラスでフィールドの依存関係を別のフィールドに定義することは可能ですか?

4

2 に答える 2

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>
于 2013-03-07T12:18:49.890 に答える
0

あなたのフォームはModelFormではないので、あなたが意味するのはクライアント側であると思います.ユーザーが新しいユーザーのチェックボックスをチェックすると、ユーザーフィールドが無効になります.

サーバーではなくブラウザーですべてが行われているため、Python 側でこれを行うことはできません。JavaScript を使用する必要があります。jQuery を使用した例:

    $(function() {
        $('#check').click(function() {
            var disable = $(this).is(':checked');
            $('#choice').attr('disabled', disable);
        });
    });

幸運を。

于 2013-03-07T02:24:31.083 に答える