Невозможно отправить форму регистрации в django
введите описание изображения здесь при нажатии кнопки зарегистрировать, данные не сохраняются в базе данных и страница не перенаправляется на индексную страницу.
views.py
from django.shortcuts import render,redirect
from django.views.generic import View
from Angram.forms import RegistrationForm
# Create your views here.
class IndexView(View):
def get(self,request,*args,**kwargs):
return render(request,"index.html")
class RegistrationView(View):
def get(self,request,*args,**kwargs):
form=RegistrationForm()
return render(request,"register.html",{"form":form})
def post(self,request,*args,**kwargs):
form=RegistrationForm(request.POST)
if form.is_valid():
User.objects.create_user(**form.cleaned_data)
return redirect("index-main")
else:
return render(request,"register.html",{"form":form})
forms.py
from django import forms
from django.contrib.auth.models import User
class RegistrationForm(forms.ModelForm):
class Meta:
model=User
fields=["first_name","last_name","username","email","password"]
urls.py
from django.contrib import admin
from django.urls import path
from Angram import views
urlpatterns = [
path('admin/', admin.site.urls),
path("index/",views.IndexView.as_view(),name="index-main"),
path("accounts/register/",views.RegistrationView.as_view(),name="signup"),
]
В представлении регистрации вы выводите шаблон в операторе else.
Вместо этого:
def post(self,request,*args,**kwargs):
form=RegistrationForm(request.POST)
if form.is_valid(): #here you have not saved the form
User.objects.create_user(**form.cleaned_data)
return redirect("index-main")
else: #here you are rendering template in else statement. you must render this template outside the if statement not inside if statement
return render(request,"register.html",{"form":form})
Сделайте следующее:
def post(self,request,*args,**kwargs):
form=RegistrationForm(request.POST)
if form.is_valid():
User.objects.create_user(**form.cleaned_data)
form.save() #here i saved the form
return redirect("index-main")
return render(request,"register.html",{"form":form})