Python ValueError位于/register/用户必须有电子邮件地址
这是我在views.py中的代码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
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)