【问题标题】:why is my form.is_valid() always returning false?为什么我的 form.is_valid() 总是返回 false?
【发布时间】:2016-01-03 09:24:25
【问题描述】:

所以问题是当我在views.py中调用authorSearch和deleteAuthor这两个方法时,form,is_valid()总是返回false。

models.py

class Author(models.Model):
    author_name = models.CharField(max_length=200,primary_key=True)
    def __str__(self):
            return self.author_name

Forms.py

class AuthorForm(forms.ModelForm):
    class Meta:
            model = Author
            fields = ['author_name',]

views.py

def authorSearch(request):
    if request.method=='POST':
            form = AuthorForm(request.POST)
            if form.is_valid():
                  #some processing here
                  return render(request,'authorSearch.html',{})
            else:
                    return HttpResponse('No such Author Found!')
    else:
            form = AuthorForm()
            return render(request,'authorSearch.html',{'form':form})

def deleteAuthor(request):
    if request.method=='POST':
            form=AuthorForm(request.POST)
            if form.is_valid():
                    #some processing here
                    return HttpResponse('Author deleted successfully!')
            else:
                    return HttpResponse('Author deletetion failed!')
    else:
            form=AuthorForm()
            return render(request,'deleteAuthor.html',{'form':form})

authorSearch.html

<div class='container'>
{% if request.method == 'GET' %}
     <form action='' method='POST'>
          <!--Some html here -->
     </form>
{% elif request.method == 'POST' %}
    <!--Some html here -->
{% endif %} 

【问题讨论】:

  • 您提交的表单是否包含空白字段?
  • 不!当然不是。我正在用作者的确切姓名填写表格。
  • 我猜问题出在某个地方,我将一个字符串(author_name)作为主键,其中还包括空格字符和所有内容......所以当它在views.py中比较它时可能会失败出于某种原因。

标签: python django django-forms django-validation


【解决方案1】:

一个疯狂的猜测:你忘记了 csrf 令牌。

只需打印发送到表单的实际数据和错误即可查看发生了什么!

def authorSearch(request):
    if request.method=='POST':
        form = AuthorForm(request.POST)
        if form.is_valid():
              #some processing here
             return render(request,'authorSearch.html',{})
        else:
             # you want to check what's happening here
             # something like this (from memory, might be wrong):
             print request.POST
             print form.errors
             print form.non_field_errors

             return HttpResponse('No such Author Found!')
    else:
        form = AuthorForm()
        return render(request,'authorSearch.html',{'form':form})

另外,我个人建议您:

  • 使用 Charles 或类似的东西来检查 HTTP 请求和响应
  • 编写测试:)

【讨论】:

  • 我试过 form.errors 并且它说这个作者名字的作者已经存在......它试图添加作者吗??..因为我使用 Author.objects.get() 来获取对象,然后我用 .delete() 方法删除它。所以这个错误不应该存在。
  • > 的绑定方法 AuthorForm.non_field_errors 在使用 form.non_field_errors 我收到此消息。我认为它的说法是该领域不正确..但确实如此。
  • @AkashTomar 哦,是的,您已经输入了primary_key=True,因此该字段必须是唯一的。
  • 是的,它是独一无二的......无论如何,django 不会再接受同一个作者。问题是别的。
猜你喜欢
  • 2014-12-27
  • 2018-01-05
  • 1970-01-01
  • 2014-09-06
  • 2020-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多