【问题标题】:Django: Form method is_valid() always return FALSEDjango:表单方法 is_valid() 总是返回 FALSE
【发布时间】:2016-04-10 23:04:15
【问题描述】:

我正在尝试制作一个 Django 应用程序。但我有这个问题。 is_valid() 方法总是返回 FALSE。也许问题出在tipoAtributo 字段中的forms.py 中,因为当我评论它时,问题就解决了。但我需要使用这个 MultipleChoiceField。

forms.py

class tipoAtribute(forms.Form):
  nombreAtribute = forms.CharField(max_length = 25)
  CHOICES = (
    ('Categorico', 'Categorico'),
    ('NUMERICO', 'NUMERICO'))
  tipoAtributo = forms.MultipleChoiceField(choices = CHOICES, required=True, widget=forms.Select())

views.py

def createTables(request):
 if request.method == 'POST':
    form = tipoAtribute(request.POST or None)
    if form.is_valid():
        print "Soy una bandera boba"
        nombreAtribute = form.cleaned_data['nombreAtribute']
        tipoAtributo = form.cleaned_data['tipoAtributo']
        cursor = connection.cursor()
        cursor.execute("use " + nombreProyecto)
        cursor.execute("CREATE TABLE "+ nombreProyecto + "(prueba VARCHAR(25))")
        return HttpResponseRedirect(reverse('index'))
 return HttpResponseRedirect(reverse('index'))

【问题讨论】:

    标签: python django forms


    【解决方案1】:

    您可以通过打印错误了解为什么它无效:

    def createTables(request):
     if request.method == 'POST':
        form = tipoAtribute(request.POST) # No need for "or None"
        if form.is_valid():
            ....
        else:
            print form.errors
    

    【讨论】:

      【解决方案2】:

      Select 小部件与MultipleChoiceField 一起使用是没有意义的。请改用SelectMultiple

      tipoAtributo = forms.MultipleChoiceField(choices=CHOICES, required=True, widget=forms.SelectMultiple())
      

      【讨论】: