Django Crispyforms在提交或填写表单之前抛出验证错误
我正在使用crispyforms在django中定制我的表单。 但是,在我将任何内容写入或提交到该字段之前,它会给我该字段所需的验证错误。它应该只告诉我一个错误时,提交没有填写字段 如果表单未填写,如何使验证错误仅在提交后显示 谢谢你的阅读 HTML文件Django Crispyforms在提交或填写表单之前抛出验证错误,django,django-forms,Django,Django Forms,我正在使用crispyforms在django中定制我的表单。 但是,在我将任何内容写入或提交到该字段之前,它会给我该字段所需的验证错误。它应该只告诉我一个错误时,提交没有填写字段 如果表单未填写,如何使验证错误仅在提交后显示 谢谢你的阅读 HTML文件 <form method="post"> {% csrf_token %} <div class="form-row"> <div class="form-group">
<form method="post">
{% csrf_token %}
<div class="form-row">
<div class="form-group">
{{ form.name|as_crispy_field }}
</div>
</div>
<div class="form-row">
<div class="form-group">
{{ form.interest_rating|as_crispy_field }}
</div>
</div>
{{ form.interest|as_crispy_field }}
<div class="form-row">
<div class="form-group">
{{ form.clarity_rating|as_crispy_field }}
</div>
<div class="form-group">
{{ form.clarity|as_crispy_field }}
</div>
<div class="form-group ">
{{ form.brevity_rating|as_crispy_field }}
</div>
<div class="form-group">
{{ form.brevity|as_crispy_field }}
</div>
<div class="form-group ">
{{ form.not_good|as_crispy_field }}
</div>
<div class="form-group ">
{{ form.general_comments|as_crispy_field }}
</div>
</div>
<button type="submit" class="btn btn-primary">Sign in</button>
</form>
<br/>
<br/>
</div>
</div>
</div>
我的观点
def readerpage(request, content_id):
content = get_object_or_404(Content, pk=content_id)
form = ReviewForm(request.POST)
if form.is_valid():
review = form.save(commit=False)
review.content = content
interest_rating = form.cleaned_data['interest_rating']
interest = form.cleaned_data['interest']
clarity_rating = form.cleaned_data['clarity_rating']
clarity = form.cleaned_data['clarity']
brevity_rating = form.cleaned_data['clarity_rating']
brevity = form.cleaned_data['clarity']
not_good = form.cleaned_data['not_good']
general_comments = form.cleaned_data['general_comments']
review.avg_rating = (float(interest_rating) +
float(clarity_rating) + float(brevity_rating)) / 3
review.pub_date = timezone.datetime.now()
review.save()
return redirect('home')
args = {'content': content, 'form': form}
return render(request, 'content/readerpage.html', args)
这不是一个简单的表单问题,只是您无条件地尝试验证并保存表单,而不首先检查它是GET还是POST请求。你想要:
def readerpage(request, content_id):
content = get_object_or_404(Content, pk=content_id)
if request.method == "POST":
form = ReviewForm(request.POST)
if form.is_valid():
review = form.save(commit=False)
# XXX snip lots of code that doesn't belong here
# -- all this should be handled by the form itself,
# (or by the model for the avg_rating part)
# the view should only have to call `form.save()`.
# ...
review.save()
return redirect('home')
else:
# GET request, present an unbound form
form = ReviewForm()
context = {'content': content, 'form': form}
return render(request, 'content/readerpage.html', content)
def readerpage(request, content_id):
content = get_object_or_404(Content, pk=content_id)
if request.method == "POST":
form = ReviewForm(request.POST)
if form.is_valid():
review = form.save(commit=False)
# XXX snip lots of code that doesn't belong here
# -- all this should be handled by the form itself,
# (or by the model for the avg_rating part)
# the view should only have to call `form.save()`.
# ...
review.save()
return redirect('home')
else:
# GET request, present an unbound form
form = ReviewForm()
context = {'content': content, 'form': form}
return render(request, 'content/readerpage.html', content)