Python Django None类型对象不可调用

Python Django None类型对象不可调用,python,django,authentication,Python,Django,Authentication,我想创建一个自己的用户模型,这样我就可以用电子邮件而不是用户名登录。 为此,我使用了本教程: 我使用了AbstractBaseUser。 我还对模型做了一些修改,所以我有一些其他字段。 问题是,当我发送请求时,我得到一个错误: TypeError at / 'NoneType' object is not callable Request Method: POST Request URL: http://127.0.0.1:8000/ Django Version: 3.1

我想创建一个自己的用户模型,这样我就可以用电子邮件而不是用户名登录。 为此,我使用了本教程:

我使用了AbstractBaseUser。 我还对模型做了一些修改,所以我有一些其他字段。 问题是,当我发送请求时,我得到一个错误:

TypeError at /
'NoneType' object is not callable
Request Method:    POST
Request URL:    http://127.0.0.1:8000/
Django Version:    3.1
Exception Type:    TypeError
Exception Value:
'NoneType' object is not callable
Exception Location:    ...\managers.py, line 18, in create_user
Python Executable:    ...\venv\Scripts\python.exe
Python Version:    3.8.5


Traceback Switch to copy-and-paste view
...\venv\lib\site-packages\django\core\handlers\exception.py, line 47, in inner
                response = get_response(request) …
:arrow_forward: Local vars
...\venv\lib\site-packages\django\core\handlers\base.py, line 179, in _get_response
                response = wrapped_callback(request, *callback_args, callback_kwargs) …
:arrow_forward: Local vars
...\views.py, line 7, in index
        user_creator.create_user(request.POST['email'], request.POST['username'], request.POST['displayname'], …
:arrow_forward: Local vars
...\managers.py, line 18, in create_user
        user = self.model(email=email, user_name=user_name, display_name=display_name, extra_fields)
我认为问题在于,它不知道第11行manager.py中的self.model应该是什么

这是我的密码:

我的观点

from django.shortcuts import render
from .managers import CustomUserManager

def index(request):
    if request.method == 'POST':
        user_creator = CustomUserManager()
        user_creator.create_user(request.POST['email'], request.POST['username'], request.POST['displayname'],
                                 request.POST['password1'], request.POST['password2'])
    return render(request=request, template_name='index.html')
我的经理

from django.contrib.auth.base_user import BaseUserManager
from django.utils.translation import ugettext_lazy as _

class CustomUserManager(BaseUserManager):
    def create_user(self, email, user_name, display_name, password, password2, **extra_fields):
        if not email:
            raise ValueError(_('The Email must be set'))
        if password != password2:
            raise ValueError(_('The passwords doesn\'t match'))
        email = self.normalize_email(email)
        user = self.model(email=email, user_name=user_name, display_name=display_name, **extra_fields)
        user.set_password(password)
        user.save()
        return user

    def create_superuser(self, email, password, **extra_fields):
        """
        Create and save a SuperUser with the given email and password.
        """
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', True)
        extra_fields.setdefault('is_active', True)

        if extra_fields.get('is_staff') is not True:
            raise ValueError(_('Superuser must have is_staff=True.'))
        if extra_fields.get('is_superuser') is not True:
            raise ValueError(_('Superuser must have is_superuser=True.'))
        return self.create_user(email, password, **extra_fields)
我的模特

from django.db import models
from django.contrib.auth.models import AbstractBaseUser
from django.contrib.auth.models import PermissionsMixin
from django.utils.translation import gettext_lazy as _
from django.utils import timezone

from .managers import CustomUserManager

class CustomUser(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(_('email address'), unique=True)
    user_name = models.CharField(max_length=15)
    display_name = models.CharField(max_length=20)
    is_staff = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    date_joined = models.DateTimeField(default=timezone.now)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    objects = CustomUserManager()

    def __str__(self):
        return self.email

class Used_Services(models.Model):
    user_id = models.ForeignKey(to='CustomUser', on_delete=models.CASCADE)
    porn_site = models.BooleanField()
    calendar = models.BooleanField()
我的表格.py

from django.contrib.auth.forms import UserCreationForm, UserChangeForm

from .models import CustomUser


class CustomUserCreationForm(UserCreationForm):

    class Meta(UserCreationForm):
        model = CustomUser
        fields = ('email',)


class CustomUserChangeForm(UserChangeForm):

    class Meta:
        model = CustomUser
        fields = ('email',)
和我的html文件

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

    <div>
        <h1>Login</h1>
        <form action="" method="post">
            {% csrf_token %}
            <input type="text" name="email" placeholder="E-Mail">
            <input type="password" name="password" placeholder="Password">
            <input type="submit" value="Login">
        </form>
    </div>

    <div>
        <h1>Register</h1>
        <form action="" method="post">
            {% csrf_token %}
            <input type="text" name="email" placeholder="E-Mail">
            <input type="text" name="username" placeholder="Username">
            <input type="text" name="displayname" placeholder="Displayname">
            <input type="password" name="password1" placeholder="Password">
            <input type="password" name="password2" placeholder="Repeat password">
            <input type="submit" value="Register">
        </form>
    </div>

</body>
</html>

开发者网站
场地
登录
{%csrf_令牌%}
登记
{%csrf_令牌%}

我能做什么?

如果您已经知道它只使用什么模型,为什么不使用CustomUser而不是self.model?@Alviandoh,那么我需要取出models.py中的objects=CustomUserManager()?因为它告诉我:ImportError:当我尝试在managers.py中导入CustomUser时,无法从部分初始化的模块“main_site.models”(很可能是由于循环导入)(…\models.py)导入名称“CustomUser”