我的django表单无效,因此.is_valid方法永远不会返回true。结果,我得到了一个"预期的HttpResponse,但收到了没有"错误的类型,因为我的代码永远不会执行if条件中的内容。我想知道如何使我的表格有效。我是django的新手,所以我可能会遗漏一些明显的东西。这是我的代码:
views.py
template_name1 = 'multiplication/detail.html'
template_name2 = 'multiplication/multiplied.html'
class myForm(forms.Form):
quantity1 = forms.IntegerField(required=False)
quantity2 = forms.IntegerField(required=False)
form = myForm()
def get(request):
return render(request,template_name1,{'form': form} )
def multiply_two_integers(x,y):
return x*y
def post(request):
if (form.is_valid()):
x = request.POST.get('quantity1')
y = request.POST.get('quantity2')
product = multiply_two_integers(x, y)
return render(request, template_name2, {'form': form, 'product':
product })
template_name1
<h1>Multiplication Function</h1>
<form action = "{% url 'multiplication:post' %}" method = "post">
{{ form.as_p }}
{% csrf_token %}
<input type = "submit" value ="Multiply">
<!--<button type="submit"> Multiply </button>-->
<h1>{{product}}</h1>
</form>
template_name2
<h1>{{product}}</h1>
的URL /乘法
from django.urls import path
from multiplication import views
app_name = 'multiplication'
urlpatterns = [
# /multiplication/
path('', views.get, name = 'get'),
path('multiplied', views.post, name='post')
]
答案 0 :(得分:1)
这段代码很奇怪。您似乎有一组功能视图,但试图从基于类的视图中随机使用一些概念。
您的表单无效的原因是您从未向其传递任何数据;未绑定的表单无效。你不应该在视图之外实例化表单;你需要在视图中执行它,当请求是POST时,你应该将POST数据传递给它。
在基于函数的视图中,您不应为get和post定义单独的函数。将它们组合在一起,就像在Django文档中播种一样。
还有一点是你错过了错误信息;你对它的反应告诉你,如果表单无效,你没有回复你的回答是问“为什么它不是有效的”,但是你应该也做它说的话并返回一个回复这个案例;表格有时实际上是无效的,你应该处理这个案子。
最后,要从表单中获取数据,您应该使用form.cleaned_data
,而不是request.POST
。
def multiply_two_integers(x,y):
return x*y
def my_view(request):
if request.method == 'POST':
form = MyForm(request.POST)
if (form.is_valid()):
x = form.cleaned_data['quantity1']
y = form.cleaned_data['quantity2']
product = multiply_two_integers(x, y)
return render(request, template_name2, {'product': product })
else:
form = MyForm()
return render(request,template_name1,{'form': form} )