Python ValueError位于/register/用户必须有电子邮件地址

Python ValueError位于/register/用户必须有电子邮件地址,python,python-3.x,django,django-views,django-custom-user,Python,Python 3.x,Django,Django Views,Django Custom User,这是我在views.py中的代码 if form.is_valid(): print(form.cleaned_data) username = form.cleaned_data.get("username") email = form.cleaned_data.get("email") password = form.cleaned_data.get("password&q

这是我在views.py中的代码

if form.is_valid():
        print(form.cleaned_data)
        username  = form.cleaned_data.get("username")
        email  = form.cleaned_data.get("email")
        password  = form.cleaned_data.get("password")
        new_user  = User.objects.create_user(username, email, password)
以下是从“printform.cleaned_data”行打印的内容

这是我在models.py中的代码

class UserManager(BaseUserManager):
    def create_user(self, email, full_name=None, password=None, is_active=True, is_staff=False, is_admin=False):
        print(email)
        if not email:
            raise ValueError("Users must have an email address")
“printemail”不返回任何内容。我不明白为什么“printemail”不返回tree34-5@hotmail.com. 我不断收到错误消息,用户必须有电子邮件地址

基于此:

def create_user(self, email, full_name=None, password=None, is_active=True, is_staff=False, is_admin=False):
您传入的第一个参数应该是电子邮件。但根据您的代码:

new_user  = User.objects.create_user(username, email, password)
您正在传递用户名而不是电子邮件。这是主要问题


您可以考虑使用窗体。保存而不是调用方法。

添加到Wrand的答案中:如果您坚持使用USER .Objist.CueType用户用户名、电子邮件、密码,则必须将CeReType用户更改为:

def create_userself,全名=无,电子邮件,密码=无,…: 原因是Django的create_用户不提供关键字参数,因此必须将所有内容按顺序排列。您需要交换参数username和email,而不是简单地替换它,否则password参数也无法工作


您的form.cleaned_数据不包含用户名字段,因此不会返回任何用户名字段

form.cleaned_data.get("username")
然后将电子邮件字段设置为username值,因为您将电子邮件作为位置参数,并将username作为此行的第一个参数传入

new_user  = User.objects.create_user(username, email, password)
把那一行改成下面的那一行,这样你就能得到你想要的了。它将自动将字典解压缩到函数中的参数中

new_user  = User.objects.create_user(**form.cleaned_data)

您传递给create_user的第一个参数是username,它在表单数据中不存在。换句话说,请尝试使用new_user=user.objects.create_useremail,password。
new_user  = User.objects.create_user(**form.cleaned_data)