首页 > 解决方案 > 在 Django 框架中,我的函数 Register 捕获了更多错误

问题描述

我有一个问题:在我的函数中,register()我使用FormRegistration了 Django 和我的 custom ProfilForm,但我无法显示不同的错误(用户名不唯一,密码不匹配,...)。

视图.py

def register(request):
    if request.method == 'POST':
        form = UserCreate(request.POST)
        form2 = ProfilForm(request.POST)

        if form.is_valid() and form2.is_valid():
            user = form.save()
            form2 = form2.save(commit=False)
            form2.user = user
            form2.skill = form2.cleaned_data.get('skill')
            form2.board = form2.cleaned_data.get('board')
            form2.save()

            username = form.cleaned_data.get('username')
            raw_password = form.cleaned_data.get('password1')
            user = authenticate(username=username, password=raw_password)
            login(request, user)
            return redirect('/accueil')
    else:
        form = UserCreate()
        form2 = ProfilForm()

    return render(
        request,
        'registration/register.html',
        {'form2': form2},
        {'form': form})

这是我的模板 register.html 用于显示错误:

{% if form.errors %}
  <div class="alert alert-danger">
            <p><strong>Error !</strong> <p>There was a problem while trying to register, check your fields.</p></p>
  </div>
{% endif %}

{% if form.errors %}
  <div class="alert alert-danger">
          <p><strong>Error !</strong> <p>{{ form.username.errors|striptags }}</p></p>
  </div>
{% endif %}

有什么建议么?

标签: djangopython-3.xdjango-views

解决方案


有几个问题:

  1. 这条线form2 = form2.save(commit=False)看起来不对;您应该将 的输出分配save()给另一个变量,但现在您只是覆盖form2.
  2. 最后一个 return 语句应该只得到一个dict上下文:

    改变你的代码

    return render(
        request,
        'registration/register.html',
        {'form2': form2},
        {'form': form})
    

    return render(
        request,
        'registration/register.html',
        {'form2': form2, 'form': form})
    

推荐阅读