如何在Django中访问单选按钮选择的值

时间:2019-10-20 13:17:14

标签: python html django radio-button

我正在尝试在django视图中访问单选按钮选定的值,但是它返回on而不是选定的值。

模板表单

<form class="col-md-8 mx-auto" action="upload" method="post" enctype="multipart/form-data">
          {% csrf_token %}
    <div class="form-group" id="div_id_sample" >
        <label for="id_sample" class="col-form-label  requiredField">Select File</label><br>
        <div class="btn btn-primary">
        <input type="file" name="sample" class="clearablefileinput" required id="id_sample" accept=".exe">
         </div>
     </div>
     <div class="form-group">
         <label for="radiogroup">Enforce Timeout</label><br>
         <div class="btn-group" data-toggle="buttons" id="radiogroup">
             <label class="btn btn-secondary">
             <input type="radio" name="timeoptions" id="option60" autocomplete="off" value="60"> 60 seconds
             </label>

             <label class="btn btn-secondary">
             <input type="radio" name="timeoptions" id="option120" autocomplete="off" value="120"> 120 seconds
             </label>

             <label class="btn btn-secondary active">
             <input type="radio" name="timeoptions" id="option180" autocomplete="off" checked value="180"> 180 seconds
             </label>
         </div>
     </div>
      <div class="form-group">
         <label for="radiogroup2">Select Machine:</label><br>
            <div class="btn-group" data-toggle="buttons" id="radiogroup2">
                <label class="btn btn-secondary">
                <input type="radio" name="machineoptions" id="machine1" autocomplete="off" value="0"> Windows XP
                </label>

                <label class="btn btn-secondary active">
                <input type="radio" name="machineoptions" id="machine2" autocomplete="off" value="1" checked> Windows 7
                </label>
            </div>
       </div>
      <button type="submit" class="btn btn-primary">Submit</button>
</form>

views.py 在我看来,我使用的是ModelForm而不是HTML,其原因是我复制并粘贴了ModelForm生成的html代码。原因是因为我需要再收集两个不在我的数据模型中的项目,这是为什么。


def upload(request):
    if request.user.is_authenticated:
        if request.method == 'POST':
            file = request.FILES['sample']
            form = SampleForm(request.POST, request.FILES)
            if form.is_valid():
                new_sample = form.save(commit=False)
                new_sample.file_name = file.name
                new_sample.user = request.user
                print(request.POST)
                TimeOut = request.POST.get('timeoptions')
                machine = request.POST.get('machineoptions')

                print(TimeOut)
                print(machine)

                form.save()
                return redirect('reports')
            else:
                messages.info(request,'Invalid Form')
        else:
            form = SampleForm()
        if request.method == 'GET':
            return render(request, 'upload2.html', {'form': form})
    else:
        return redirect(reverse('login'))


打印输出

<QueryDict: {'csrfmiddlewaretoken': ['VvAqdOp8RrpKOgwxLD2dpGartPvUrTHTg9AUbqsX6vphxdojTJqn7tsvLCkneWOm'], 'timeoptions': ['on'], 'machineoptions': ['on']}>
on
on

我只是尝试访问选定的按钮值。

1 个答案:

答案 0 :(得分:2)

我想这主要是因为您将<input>标记括在<label>标记内。此外,您还必须赋予for属性for并将输入元素的id放入在<label>标记

尝试这样:

<label class="btn btn-secondary" for="option60">60 seconds</label>
<input type="radio" name="timeoptions" id="option60" autocomplete="off" value="60"> 

您可以对所有单选按钮执行此操作。然后,您可以在视图中使用TimeOut = request.POST.get('timeoptions')