form.is_valid () возвращает false в django встроенной пользовательской модели - PullRequest
0 голосов
/ 29 апреля 2020

Я использую встроенную пользовательскую модель 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 %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...