我的Django表单未在数据库中验证和存储信息

我的Django表单未在数据库中验证和存储信息,django,Django,我创建了一个自定义用户模型,并使用该模型创建了注册表单。但每当我单击submit按钮时,表单都不会验证,也不会将数据存储在数据库中。它只是将我重定向到家中,而不将数据存储在数据库中。但我可以在数据库中手动存储数据 models.py from django.db import models from django.db import models from django.contrib.auth.models import AbstractBaseUser, BaseUserManager

我创建了一个自定义用户模型,并使用该模型创建了注册表单。但每当我单击submit按钮时,表单都不会验证,也不会将数据存储在数据库中。它只是将我重定向到家中,而不将数据存储在数据库中。但我可以在数据库中手动存储数据

models.py

from django.db import models

from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager



class SignUpManager(BaseUserManager):
    def create_user(self, email,age,name, username, password=None):
        if not email:
            raise ValueError("insert user")
        if not username:
            raise ValueError("insert username")
        if not name:
            raise ValueError("insert name")
        if not age:
            raise ValueError("insert age")
        user = self.model(
           email=self.normalize_email(email),
           username=username,
           age=age,
           name=name,
        )
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email,name,age,username, password):

        user = self.create_user(
            email=self.normalize_email(email),
            username=username,
            password=password,
            age=age,
            name=name,
        )
        user.is_admin = True
        user.is_staff = True
        user.is_superuser = True

        user.save(using=self._db)
        return user


class UserSignupModel(AbstractBaseUser):
    email = models.EmailField(verbose_name="email", max_length=60, unique=True)
    age = models.CharField(max_length=15)
    name = models.CharField(max_length=15)
    username = models.CharField(max_length=15, unique=True)
    date_joined = models.DateTimeField(verbose_name="date joined", auto_now_add=True)
    last_login = models.DateTimeField(verbose_name="last login", auto_now=True)

    is_admin = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)

    USERNAME_FIELD = "username"
    REQUIRED_FIELDS = ['email','name','age']
    objects = SignUpManager()

    def __str__(self):
        return self.email

    def has_perm(self, perm, obj=None):
        return self.is_admin

    def has_module_perms(self, app_label):
        return True
#migrate --run-syncdb in case no work
forms.py

from django import forms

from django.contrib.auth.forms import UserCreationForm
from diabetes.models import UserSignupModel


class UserSignupForm(UserCreationForm):
    email=forms.EmailField(max_length=60,help_text="add a valid email address")
    name=forms.CharField(max_length=15,help_text="add a valid name")
    age=forms.CharField(max_length=15)

    class Meta:
        model=UserSignupModel
        fields=('email','name',"username",'age',"password1","password2")
views.py

from django.shortcuts import render,redirect
from django.contrib.auth import login,authenticate
from diabetes.forms import UserSignupForm


# Create your views here.
def home(request):
    return render(request,'diabetes/home.html')

def signupuser(request):
    if request.method == 'POST':
        form=UserSignupForm(request.POST)
        if form.is_valid():
            form.save()
            email=form.cleaned_data.get('email')
            raw_password=form.cleaned_data.get('password1')
            account=authenticate(email=email,password=raw_password)
            login(request,account)
            return redirect('home')
        else:
            return redirect('home')






    else:
        form = UserSignupForm()
    return render (request,'diabetes/signupuser.html',{'form':form})
signupuser.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<form method="POST">
    {% csrf_token %}
    {{ form.as_p}}
    <input type="submit">SUBMIT</input>
</form>

</body>
</html>

标题
{%csrf_令牌%}
{{form.as_p}}
提交

您在views.py中的注册方法有错误。参考此代码,查看可以进行哪些更改

# method for registration page
def register_view(request):
register_form = AddUserForm(request.POST or None)

# if the data provided in the form is valid than save the form 
if register_form.is_valid():
    user = register_form.save(commit=False)
    user = register_form.save()
    raw_password = register_form.cleaned_data.get('password1')

    user = authenticate(request, email=user.email, password=raw_password)
    group = Group.objects.get(name='Student')
    user.groups.add(group)
    if user is not None:
        login(request, user)
    return redirect('login')

return render(request, 'apps/register.html', {'register_form': register_form})

当form.is_valid()为false时,您可以尝试删除代码,然后您将看到引发的验证程序错误。