我在 Stack 中進行了研究,我的問題與大多數人相反,我看到了一些讓它出現的方法,但我的問題是當用戶點擊“注冊”按鈕/重繪 注冊頁面時它會出現。因此,由于表單是空的,因此在用戶輸入/重繪 頁面的任何地方都會出現令人討厭的事情。
查看.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>
列印

PS:該網站是葡萄牙語,但我可以在heroku中共享表單鏈接
uj5u.com熱心網友回復:
您的邏輯與您想要的相反:無論請求是 POST 還是 GET 請求,都使用 POST 資料初始化表單,如果沒有 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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/352673.html
