我在allauth的自定义注册表单中使用了以下代码(在forms.py中):
class RegistrationForm(UserCreationForm):
birth_date = forms.DateField(widget=extras.SelectDateWidget(years=BIRTH_DATE_YEARS))
class Meta:
model = get_user_model()
fields = ('username', 'email', 'password1', 'password2', 'first_name', 'last_name', 'gender', 'birth_date', 'city', 'country')
我当然ACCOUNT_SIGNUP_FORM_CLASS
在settings.py中指定了指向此表单的信息,它显示了我放入其中的字段。但是,即使我放置signup
方法,它也永远不会被调用,因此它对提交不起作用。我尝试使用,save
但仍然是相同的-会产生一个错误,即在创建用户并将其保存到数据库时,我自定义添加的字段之一为空。那么,实现此目标的正确代码是什么?
感谢@rakwen在这里找到了正确的解决方案。我编写了自定义适配器,并将其放在应用程序的adapters.py中:
from allauth.account.adapter import DefaultAccountAdapter
class AccountAdapter(DefaultAccountAdapter):
def save_user(self, request, user, form, commit=False):
data = form.cleaned_data
user.username = data['username']
user.email = data['email']
user.first_name = data['first_name']
user.last_name = data['last_name']
user.gender = data['gender']
user.birth_date = data['birth_date']
user.city = data['city']
user.country = data['country']
if 'password1' in data:
user.set_password(data['password1'])
else:
user.set_unusable_password()
self.populate_username(request, user)
if commit:
user.save()
return user
然后,我ACCOUNT_ADAPTER
在settings.py中指定指向该适配器,它终于开始工作了!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句