一段時間以來,我一直在解決我的自定義 allauth Django 用戶模型的問題。我只想在我的用戶注冊表單中使用電子郵件、名字、姓氏和密碼,我可以讓它作業一次,但是當第二個用戶注冊時,它說用戶名已經存在。我見過其他人有類似的問題,但不幸的是他們的解決方案不起作用。如果我洗掉了自定義帳戶表單,那么它會洗掉,但我需要在我的注冊表單中包含名字和姓氏,所以不知道如何解決這個問題。任何幫助表示贊賞!
設定.py
AUTH_USER_MODEL = 'accounts.CustomUser'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_USER_MODEL_USERNAME_FIELD = None
# I have also tried ACCOUNT_USER_MODEL_USERNAME_FIELD = 'username' and ACCOUNT_USER_MODEL_USERNAME_FIELD = 'email' per the solution linked above, but that did not work for my use case
ACCOUNT_FORMS = {
'signup': 'accounts.forms.CustomUserCreationForm'
}
模型.py
class CustomUser(AbstractUser):
email = models.EmailField(max_length=256)
first_name = models.CharField(max_length=128)
last_name = models.CharField(max_length=128)
REQUIRED_FIELDS = ['email', 'first_name', 'last_name']
表格.py
class CustomUserCreationForm(UserCreationForm):
class Meta:
model = get_user_model()
fields = ('email', 'first_name', 'last_name')
uj5u.com熱心網友回復:
在玩了一下并使用 Ankit 的回應作為模板后想出了一個答案。
表格.py
from django import forms
from allauth.account.forms import SignupForm
class CustomUserCreationForm(SignupForm):
email = forms.EmailField(max_length = 256)
first_name = forms.CharField(max_length = 128)
last_name = forms.CharField(max_length = 128)
def save(self, request):
user = super(CustomUserCreationForm, self).save(request)
user.save()
return user
設定.py
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_USER_MODEL_USERNAME_FIELD = None
ACCOUNT_FORMS = {
'signup': 'accounts.forms.CustomUserCreationForm'
}
uj5u.com熱心網友回復:
您可以覆寫 django-allauth并在方法SignUpForm中保存必填欄位。save()
from django import forms
from allauth.account.forms import SignupForm
class CustomUserCreationForm(SignupForm):
email = forms.IntegerField()
first_name = forms.CharField(max_length=20)
last_name = forms.CharField(max_length=20)
def save(self, request):
user = super(CustomUserCreationForm, self).save(request)
user.email = self.cleaned_data['email']
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.save()
# You must return the original result.
return user
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/414180.html
標籤:
