When ever I am running the project and try to create register the patient or doctor it is showing this error. error and below it is showing error in return HttpResponseRedirect(self.get_success_url())
and if I try to visit login page it is not rendering.
Below is my code. views.py
class RegisterPatientView(CreateView):
"""
Provides the ability to register as a Patient.
"""
model = User
form_class = PatientRegistrationForm
template_name = 'accounts/patient/register.html'
success_url = '/'
extra_context = {
'title': 'Register'
}
def dispatch(self, request, *args, **kwargs):
if self.request.user.is_authenticated:
return HttpResponseRedirect(self.get_success_url())
return super().dispatch(self.request, *args, **kwargs)
def post(self, request, *args, **kwargs):
form = self.form_class(data=request.POST)
if form.is_valid():
user = form.save(commit=False)
password = form.cleaned_data.get("password1")
user.set_password(password)
user.save()
return redirect('accounts:login')
else:
return render(request, 'accounts/patient/register.html', {'form': form})
urls.py
from django.urls import path
from .views import *
from appointment.views import *
app_name = "accounts"
urlpatterns = [
path('patient/register', RegisterPatientView.as_view(), name='patient-register'),
path('patient/profile/update/', EditPatientProfileView.as_view(), name='patient-profile-update'),
path('doctor/register', RegisterDoctorView.as_view(), name='doctor-register'),
path('doctor/profile/update/', EditDoctorProfileView.as_view(), name='doctor-profile-update'),
path('login', LoginView.as_view(), name='login'),
path('logout', LogoutView.as_view(), name='logout'),
]
models.py
from accounts.managers import UserManager
GENDER_CHOICES = (
('male', 'Male'),
('female', 'Female'))
class User(AbstractUser):
username = None
role = models.CharField(max_length=12, error_messages={
'required': "Role must be provided"
})
gender = models.CharField(max_length=10, blank=True, null=True, default="")
email = models.EmailField(unique=True, blank=False,
error_messages={
'unique': "A user with that email already exists.",
})
phone_number = models.CharField(unique=True, blank=True, null=True, max_length=20,
error_messages={
'unique': "A user with that phone number already exists."
})
USERNAME_FIELD = "email"
REQUIRED_FIELDS = []
def __unicode__(self):
return self.email
objects = UserManager()
please! help me out and let me know if any other codes required. Thank you.
The error is because you're calling self.get_success_url()
in dispatch()
, the CreateView.get_success_url()
depends the object
field, that is created on CreateView.get()
and CreateView.post()
methods.
I recommend you to change your view to:
class RegisterPatientView(CreateView):
. . .
success_url = '/'
. . .
def dispatch(self, request, *args, **kwargs):
if self.request.user.is_authenticated:
return HttpResponseRedirect(self.success_url)
return super().dispatch(self.request, *args, **kwargs)
def post(self, request, *args, **kwargs):
super().post(request, *args, **kwargs)
form = self.form_class(data=request.POST)
. . .