我使用的是内置的django用户模型,但是很难向用户反馈他们的注册详细信息失败的原因。
例如,不符合模型密码要求,现有用户等。
我有。
# forms.py - so they supply their email address for verification
class CustomUserCreationForm(UserCreationForm):
class Meta(UserCreationForm.Meta):
fields = UserCreationForm.Meta.fields + ("email",)
# views.py
def register(request):
if request.method == "GET":
return render(
request, "users/register.html",
{"form": CustomUserCreationForm}
)
elif request.method == "POST":
form = CustomUserCreationForm(request.POST)
if form.is_valid():
user = form.save(commit=False)
user.is_valid = False
user.save()
else:
messages.info(request, 'invalid registration details')
return render(request, "users/register.html", {"form": CustomUserCreationForm})
如何找出forms.if_valid()
失败的原因,并将其返回给用户?目前,它只是返回一个通用的消息,没有用户反馈为什么它不工作。
谢谢
发布于 2020-09-16 05:29:26
一旦调用form.is_valid()
,如果出现错误,表单的实例就会变得非常重要,因为这些错误都存在于该实例上。因此,您需要将其传递回用户,以便显示错误。
因此,要在您的示例中执行此操作,您需要更改视图,如下所示
def register(request):
if request.method == "GET":
return render(
request, "users/register.html",
{"form": CustomUserCreationForm}
)
elif request.method == "POST":
form = CustomUserCreationForm(request.POST)
if form.is_valid():
user = form.save(commit=False)
user.is_valid = False
user.save()
else:
messages.info(request, 'invalid registration details')
return render(
request,
"users/register.html",
{"form": form} # This still includes the errors instead of creating a new form
)
这样,您就可以遍历模板中的错误。
<form method="post" action="{{ request.get_full_path }}">
{% csrf_token %}
{% if form.non_field_errors %}
{% for error in form.non_field_errors %}
{{ error }}
{% endfor %}
{% endif %}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
{% for field in form %}
{{ field }}
{{ field.errors.as_ul }}
{% endfor %}
<button class="btn btn-primary" type="submit">Submit</button>
</form>
https://stackoverflow.com/questions/63909645
复制相似问题