Я использую встроенную пользовательскую модель django и подключил ее к модели студента с помощью поля onetoOne. Я новичок, поэтому прошу прощения за любой ненужный или избыточный код, который не влияет на ошибку, но сообщите мне, если есть лучше, как я пытаюсь учиться. Ошибка появляется, что ответ Http был Нет. С небольшим дополнительным кодом он печатает «неверную форму». Поэтому ошибка должна быть в form.is_valid () или в способе, который я определил для модели «Пользователь и ученик», или в аутентификации.
файл forms.py
from django import forms
from .models import Student, User
#student forms
class StudentSignUpForm(forms.Form):
name = forms.CharField(max_length=256)
roll_no = forms.IntegerField()
sem = forms.IntegerField()
branch = forms.ChoiceField(choices =[
('EXTC','EXTC'),
('ETRX','ETRX'),
('Comps','Comps'),
('Bio','Bio'),
('Mech','Mech'),
('Civil','Civil'),
])
email = forms.EmailField()
set_password = forms.CharField(max_length=100,widget=forms.PasswordInput)
confirm_password = forms.CharField(max_length=100, widget= forms.PasswordInput)
def clean_password(self):
password1 = self.cleaned_data['set_password']
password2 = self.cleaned_data['confirm_password']
if password1!=password2 and password1 and password2:
raise forms.ValidationError('Passwords do not match')
def clean_email(self):
email = self.cleaned_data.get('email')
qs = User.objects.filter(email=email)
if qs.exists():
raise forms.ValidationError("email is taken")
return email
class Login(forms.ModelForm):
class Meta:
fields=['username','password']
model = User
widgets={
'password':forms.PasswordInput(),
}
models.py
from django.db import models
from django.urls import reverse
from django.contrib.auth.models import User
# Create your models here.
class Student(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
name = models.TextField(max_length=256)
roll_no = models.IntegerField()
branch = models.CharField(max_length=5)
sem = models.IntegerField(default=1)
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('students:detail',kwargs={'pk':self.pk})
Views.py
def login(request):
if request.method=='POST':
#if request method is post
form = Login(request.POST)
print('method is post')
if form.is_valid():
# if form is valid then
form.save()
user =authenticate(username=username, password=password)
print('user is authenticated',user)
if user is not None:
# if user exists then
login(request,user)
print('student login done')
return render(request,'stundents/students_detail.html',pk=user.id)
else:
# if user has entered invalid Credentials or not present
print('invalid Credentials')
message = 'Invalid Credentials or SignUp'
form = Login()
return render(request,'students/login.html',context={'message':message,'form':form})
else:
print('invalid form')
message = 'Invalid form'
form = Login()
return render(request,'students/login.html',context={'message':message,'form':form})
else:
#if request method is get
form = Login()
return render(request, 'students/login.html',{'form':form})
шаблон входа
{% extends 'base.html' %}
{% block content %}
{{message}}
<form method="post">
{{form.as_p}}
{% csrf_token %}
<input type="submit" value="Login">
</form>
{% endblock %}