我创建了一个包含最少字段的表单(用于测试),但它从不输入 form.is_valid()
这是最小代码
models.py 中的
from django.db import models
class sample(models.Model):
field1=models.CharField(max_length=100)
field2=models.CharField(max_length=100)
form.py 中的
from django.forms import ModelForm
from app.models import sample
class someform(ModelForm):
class Meta:
model=sample
在views.py中
some imports
def index(request):
return render(request, 'app/index.html')
def contact(request):
if request.method=='POST':
form=someform(request.POST)
if form.is_valid():
field1=form.cleaned_data['field1']
field2=form.cleaned_data['field2']
return HttpResponse("valid")
else:
return HttpResponse("invalid")
else:
form=someform()
return HttpResponse("error")
问题是,它永远不会进入(如果是form.is_valid())。我错过了什么吗?请帮忙
index.html中的
<html>
<body bgcolor="#2E9AFE">
<form action="contact" method="post" enctype="multipart/form-data">
{% csrf_token %}
<input type="text" id="field1" name="field1">
<input type="text" id="field2" name="field2">
<input type="submit" id="submit" name="submit">
</form></body></html>
答案 0 :(得分:4)
如果请求不是在views.py中的POST:
,首先将表单传递给index.htmlelse:
form=someform()
return render(request, 'index.html', locals())
在模板中你应该这样:
<form action="contact" method="POST" xmlns="http://www.w3.org/1999/html">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="btn">Submit</button>
</form>
答案 1 :(得分:3)
当收到POST查询时,Django正在寻找ID id_field1
和id_field2
的2个字段,因此您的HTML将如下:
<html>
<body bgcolor="#2E9AFE">
<form action="contact" method="post" enctype="multipart/form-data">
{% csrf_token %}
<input type="text" id="id_field1" name="field1">
<input type="text" id="id_field2" name="field2">
<input type="submit" id="submit" name="submit">
</form>
</body>
</html>
另一种解决方案是使用{{ form.as_p }}
或{{ form.as_table }}
自动在
或标签内呈现输入。
您还可以在当前HTML中添加{{ form.non_field_errors }}
,{{ form.field1.errors }}
和{{ form.field2.errors }}
,以便在验证失败时显示表单错误。