Python Django:当登录时创建新用户时,用户名为空

Python Django:当登录时创建新用户时,用户名为空,python,django,Python,Django,我使用HTML/CSS而不是Django的form.as\p在Django中创建了用于登录和注册的自定义表单。我在views.py中有以下代码: def login_user(request): logout(request) if request.POST: username = request.POST['username'] password = request.POST['password'] user = authenticate(username=userna

我使用HTML/CSS而不是Django的form.as\p在Django中创建了用于登录和注册的自定义表单。我在views.py中有以下代码:

def login_user(request):
logout(request)
if request.POST:
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(username=username, password=password)
    if user is not None:
        login(request, user)
        return redirect('/mainpage/')
    else:
        login_message = "Your username or password is incorrect."
        return render(request, 'index.html', {'login_message': login_message})
return render(request, 'index.html')

def sign_up(request):
    if request.POST:
        username = request.POST['username']
        email = request.POST['email']
        password = request.POST['password']
        password_confirm = request.POST['password-confirm']
        if(valid_form(username, email, password, password_confirm)):
            #create the new user
            user = CustomUser(name=username, email=email, password=password)
            user.save()
            user = authenticate(username=username, password=password)
            login(request, user)
            return redirect('/mainpage/')
        else:
            message = "There was a problem."
            return render(request, 'index.html', {'message': message})
    return render(request, 'index.html')
我在models.py中为CustomUser提供了以下模型:

from django.contrib.auth.models import AbstractUser
from django.db import models

class CustomUser(AbstractUser):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=200, null=True)
email = models.EmailField(max_length=70, null=True)
password = models.CharField(max_length=50, null=True)
我的代码用于注册,输入用户名、电子邮件和密码后,我可以创建一个新用户。当我在Django管理站点的用户列表中检查用户时,对于我创建的ruby新用户,只存储他们的电子邮件,而不存储他们的用户名。我相信这也是我在与这个新用户登录时遇到问题的原因


但是,我不确定为什么没有为我创建的新用户存储用户名。任何见解都值得赞赏。

问题可能在于:

user = CustomUser(name=username, email=email, password=password)  # <-- Here
user.save()

或者您可以使用manager方法创建用户。

问题可能在于:

user = CustomUser(name=username, email=email, password=password)  # <-- Here
user.save()

或者您可以使用manager方法创建用户。

由于您的“CustomUser”类扩展了AbstractUser,它作为抽象模型提供了默认用户的完整实现,因此您应该使用相同的签名用户名,而不是如下所示的名称:

#create the new user
user = CustomUser(username=username, email=email, password=password)

由于“CustomUser”类扩展了AbstractUser,它作为抽象模型提供了默认用户的完整实现,因此您应该使用相同的签名用户名,而不是以下名称:

#create the new user
user = CustomUser(username=username, email=email, password=password)
根据django文档,AbstractUser有用户名字段,该字段是必需的,用于身份验证:

username = models.CharField(_('username'), max_length=30, unique=True,
        help_text=_('Required. 30 characters or fewer. Letters, digits and '
                    '@/./+/-/_ only.'),
        validators=[
            validators.RegexValidator(r'^[\w.@+-]+$',
                                      _('Enter a valid username. '
                                        'This value may contain only letters, numbers '
                                        'and @/./+/-/_ characters.'), 'invalid'),
        ],
        error_messages={
            'unique': _("A user with that username already exists."),
        })
在您的例子中,您有一个name字段,它是模型中的一个附加字段,但在视图中,您将username传递给name,而所需的username字段没有填充

尝试删除模型中的“名称”字段。将用户名传递给用户名

根据django文档,AbstractUser有用户名字段,该字段是必需的,用于身份验证:

username = models.CharField(_('username'), max_length=30, unique=True,
        help_text=_('Required. 30 characters or fewer. Letters, digits and '
                    '@/./+/-/_ only.'),
        validators=[
            validators.RegexValidator(r'^[\w.@+-]+$',
                                      _('Enter a valid username. '
                                        'This value may contain only letters, numbers '
                                        'and @/./+/-/_ characters.'), 'invalid'),
        ],
        error_messages={
            'unique': _("A user with that username already exists."),
        })
在您的例子中,您有一个name字段,它是模型中的一个附加字段,但在视图中,您将username传递给name,而所需的username字段没有填充

尝试删除模型中的“名称”字段。将用户名传递给用户名