未选择任何单选按钮时选择警告

时间:2018-07-16 22:52:01

标签: django

我使用django用单选按钮创建了一个简短的调查表。如果没有选择任何选项,我会收到一条警告,提示“请选择这些选项之一”,这是很好的。我不喜欢箭头指向第一个单选按钮并在其周围创建一个正方形的事实。完成问卷的人可能会由于警告而感到困惑并选择第一个选项。我的问题是,是否可以更改警告框?也许将其向右移动并删除箭头,所以这似乎是与整个单选按钮相对应的警告,而不仅仅是第一个按钮。

我的models.py是(转到选项17,但每个选项都与option1相同):

class Value(models.Model):
  SN=models.CharField(max_length=10, blank=True, verbose_name='StudentNumber')
  choice1=models.CharField(max_length=2, blank=True, verbose_name="V1")
  user=models.ForeignKey(User, on_delete=models.CASCADE)

我的forms.py是:

options=[
  ('1', '1'),
  ('2', '2'),
  ('3', '3'),
  ('4', '4'),
  ('5', '5')
  ]
class ValueForm(forms.ModelForm):
    SN=forms.CharField(label='Please input your Student 
No',widget=forms.TextInput(attrs={'placeholder':'Student No'}))
choice1=choice2=choice3=choice4=choice5=choice6=choice7=choice8=choice9=choice10=choice11=choice12=choice13=choice14=choice15=choice16=choice17=forms.ChoiceField( choices=options, widget=RadioSelect(),)
class Meta:
    model=Value
    fields=["SN","choice1","choice2","choice3","choice4","choice5","choice6","choice7","choice8","choice9","choice10","choice11","choice12","choice13","choice14","choice15","choice16","choice17",]

我的views.py是(仅添加了问题中的第一个问题):

def question_values(request):
    form = ValueForm()
    Questions = {'Q1':'1. Study effectively on your own in independent private study'}
    return render(request,'questionnaire/index.html', {'form':form, 'Questions':Questions})

def create_survey(request):
    form=ValueForm(request.POST)
    if form.is_valid():
        answers=form.save(commit=False)
        answers.user=request.user
        answers.save()
        return redirect('/result')
    values=Value.objects.order_by('-id')[0]
    datas=[values.SN,values.choice1,values.choice2,values.choice3,values.choice4,
         values.choice5,values.choice6,values.choice7,values.choice8,values.choice9,
         values.choice10,values.choice11,values.choice12,values.choice13,values.choice14,
         values.choice15,values.choice16,values.choice17 
      ]       
    return render(request, 'questionnaire/result.html', {'form':form, 'values':values, 'datas':datas})

我得到了值和数据,所以我可以尝试{{values.choice1}}打印一个特定值,并尝试{{datas}}在结果模板上打印所有值=,以便检查代码是否有效。 / p>

对于index.html,我无法进行循环,因此我针对每个问题分别进行了循环:

<div class="col-md-8 col-md-push-2">      
    <label>{{Questions.Q1}}</label>
  </div>      
  <div class="col-md-4">
  {% for radio in form.choice1 %}
    <label class="radio-inline">{{radio}}</label>
  {% endfor %}  
</div> 
</div>

问题是我在视图中创建的词典

我已经搜索了很多,但是在任何地方都找不到解决方案。

这是它的屏幕截图:

enter image description here

预先感谢

1 个答案:

答案 0 :(得分:0)

您想要的东西属于浏览器,这在不同的浏览器中可能有所不同。您可以做的是:

  • required=False设置为字段

    class ValueForm(forms.ModelForm):
         choice1 = forms.ChoiceField(choices=options,required=False,
                       widget=RadioSelect())
    
  • 以表格形式自行清理数据

     class ValueForm(forms.ModelForm):
         choice1 = forms.ChoiceField(choices=options,required=False,
                       widget=RadioSelect())
    
          def clean_choice1(self):
              data = self.cleaned_data.get('choice1')
              if not data:
                  self.add_error("choice1","Please select one of these options")
    
  • 设计您自己的警告框,(引导程序之一很完美)

      {% if form.choice1.errors %}
            <span class="custom-warning-box"> 
            {{form.choice1.errors.as_text}}
            </span>
      {% endif %}
      {% for radio in form.choice1 %}
           <label class="radio-inline">{{radio}}</label>
      {% endfor %}