如何解决使用context_processors刷新时重新提交django表单
我正在尝试创建用户注册表格,并能够成功完成注册过程和验证。表单是使用 context_processor 处理的,因为该表单位于base.html
上并且位于模式内部。
提交后,我需要重定向到用户所在的当前页面,并且该页面可以正常工作。但是我的表单在刷新后会不断重新提交。
context_processor.py
def include_registration_form(request):
form = createuserForm()
if request.method == 'POST':
form = createuserForm(request.POST)
if form.is_valid():
form.save()
user = form.cleaned_data.get('username')
messages.success(request,'Account was created for {}. Now you can sign in.'.format(user))
else:
messages.error(request,"Something went wrong. Account not created!")
context = {
'registration_form': form,}
return context
forms.py
class createuserForm(UserCreationForm):
first_name = forms.CharField(required=True)
last_name = forms.CharField(required=True)
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ['username','first_name','last_name','email','password1','password2']
网址格式
urlpatterns = [
path('admin/',admin.site.urls),path('',views.home,name='index'),path('menu',views.menu,name='menu'),path('promo',views.promo,name='promo'),]
模板(base.html)
<form class="needs-validation" action="" method="post" novalidate>
{% csrf_token %}
{% for field in registration_form %}
<div class="col-sm">
<label>{{ field.label }}</label>
{% if registration_form.is_bound %}
{% if field.errors %}
{% render_field field class="form-control form-control-sm is-invalid" %}
{% if field.name == 'username' or 'password1' %}
<small>
{{ field.help_text }}
</small>
{% endif %}
<div class="invalid-tooltip d-block float-right" data-placement="bottom">
{% for error in field.errors %}
{{ error }}
{% endfor %}
</div>
{% else %}
{% render_field field class="form-control form-control-sm is-valid" %}
{% endif %}
{% else %}
{% render_field field class="form-control form-control-sm" %}
{% endif %}
</div>
{% endfor %}
<div class="text-right form-sm mt-2">
<button type="submit" class="btn btn-outline-success">Sign up <i class="fa fa-sign-in ml-1"></i>
</button>
</div>
</form>
我尝试在HttpResponseRedirect('')
之后使用if form,is_valid
,它给出了
ValueError at /
dictionary update sequence element #0 has length 0; 2 is required
Request Method: POST
Request URL: http://127.0.0.1:8000/
Django Version: 3.1.2
Exception Type: ValueError
Exception Value:
dictionary update sequence element #0 has length 0; 2 is required
我是Django的初学者,现在尝试解决这个问题已有几个小时。任何帮助将不胜感激。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。