Ошибки формы Django появляются без ошибок

Я провел исследование здесь в Stack и моя проблема противоположна большинству, я видел несколько способов заставить его появиться, но моя проблема в том, что он появляется, когда пользователь нажимает кнопку "Регистрация" / Обновить страницу регистрации. Так что это раздражающая вещь, которая появляется везде, где пользователь входит/обновляет страницу, потому что форма пуста.

View.py

@unauthenticated_user
def register(request):
    form_u = CreateUser(request.POST)
    form_c = CreateClient(request.POST)
    if request.method == 'POST':
        form_u = CreateUser(request.POST)
        form_c = CreateClient(request.POST)
        if form_u.is_valid() and form_c.is_valid():
            user = form_u.save()
            group = Group.objects.get(name='func')
            user.groups.add(group)
            client = form_c.save(commit=False)
            client.user = user
            client.save()
            return redirect('login')
        else:
            form_u = CreateUser()
            form_c = CreateClient()

    context = {'form_u': form_u, 'form_c': form_c}
    return render(request, 'register.html', context)

HTML

<form method="POST" action="" id="ativa">
                    {% csrf_token %}
...

</form>
            

            {{form_u.errors}}
            {{form_c.errors}}

            <div class="mt-4">
                <div class="d-flex justify-content-center links">
                    Have an account ? <a href="{% url 'login' %}" class="ml-2">Login</a>
                </div>
            </div>

Print

Form error

P.S: Сайт на португальском, но я могу поделиться ссылкой на форму в heroku

Ваша логика противоположна желаемой: Инициализируйте формы данными POST независимо от того, является ли запрос POST или GET, что приведет к ошибкам, если нет данных POST. Затем вы инициализируете пустые формы, когда данные формы недействительны.

Вместо этого вы захотите передавать POST-данные, только если запрос является POST-запросом, и инициализировать пустые формы, только если запрос не является POST-запросом:

@unauthenticated_user
def register(request):
    # If request is POST, validate forms and add objects.
    if request.method == 'POST':
        form_u = CreateUser(request.POST)
        form_c = CreateClient(request.POST)
        if form_u.is_valid() and form_c.is_valid():
            user = form_u.save()
            group = Group.objects.get(name='func')
            user.groups.add(group)
            client = form_c.save(commit=False)
            client.user = user
            client.save()
            return redirect('login')
         # We can remove the else statement here, 
         # because the function either redirects or resumes 
         # normal flow and renders the template 
         # with the form errors.
    else:
    # Only initialize empty forms when no POST request was made.
        form_u = CreateUser()
        form_c = CreateClient()

    context = {'form_u': form_u, 'form_c': form_c}
    return render(request, 'register.html', context)
Вернуться на верх