Python Django None类型对象不可调用
我想创建一个自己的用户模型,这样我就可以用电子邮件而不是用户名登录。 为此,我使用了本教程: 我使用了AbstractBaseUser。 我还对模型做了一些修改,所以我有一些其他字段。 问题是,当我发送请求时,我得到一个错误: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
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”