微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用context_processors刷新时重新提交django表单

如何解决使用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 举报,一经查实,本站将立刻删除。