Ошибки формы 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>
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)