我正在嘗試使用 AbstractUser 注冊用戶,但出現錯誤。雖然我收到錯誤訊息,但用戶仍然可以注冊,但我無法處理已注冊用戶的登錄。
錯誤是這樣的: 錯誤是這樣的:
帖子請求
我的 views.py 是這樣的:
def signup(request):
if request.method == 'POST':
first_name = request.POST['first-name']
last_name = request.POST['last-name']
username = request.POST['username']
email = request.POST['email']
phone_no = request.POST['phone-no']
password = request.POST['password']
password2 = request.POST['password2']
if password==password2:
if CustomUser.objects.filter(username=username).exists():
messages.info(request, 'Username Taken')
return redirect('signup')
elif CustomUser.objects.filter(email=email).exists():
messages.info(request, 'Email Already Exist')
return redirect('signup')
else:
CustomUser.objects.create_user(first_name=first_name, last_name=last_name, username=username, email=email, phone_no=phone_no, password=password)
CustomUser.save(commit=False)
return redirect('login')
else:
messages.info(request, 'Passwords Not Matching')
return redirect('signup')
else:
return render(request, 'signup.html')
還有我的models.py:
class CustomUser(AbstractUser):
id = models.AutoField(primary_key=True)
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
username = models.CharField(max_length=100, unique=True)
email = models.EmailField(unique=True)
password = models.CharField(max_length=150)
phone_no = models.CharField(max_length=20)
is_end_user = models.BooleanField(default=True)
is_smart_earner = models.BooleanField(default=False)
is_top_user = models.BooleanField(default=False)
uj5u.com熱心網友回復:
洗掉CustomUser.save(commit=False). 毫無意義,記錄是用.create_user(…)[Django-doc] 方法創建的。
您只能在模型物件上呼叫.save(…)[Django-doc] 方法,因為它們代表相應表中的記錄。在類上使用它沒有多大意義,因為它代表一個表,并且在創建記錄時不會更改表本身。CustomUser
此外,您的.save()呼叫使用了一個 parameter commit=…,但這也沒有多大意義:.save(…)a 的 aModelForm可以接受一個commit=…引數,而不是 a 的那個Model。
但是,我建議使用ModelForm. 這樣ModelForm可以自動驗證唯一欄位,并保存創建的用戶。Django 已經ModelForm為此提供了一個基礎:UserCreationForm[Django-doc]。通過一些小的更改,它可能適用于您的自定義用戶模型。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/370657.html
標籤:姜戈
上一篇:用Css改變背景
