虽然为时已晚,但以防万一。
您需要通过继承DefaultAccountAdapter并将其设置为子类来创建自己的Custom AccountAdapter
class UserAccountAdapter(DefaultAccountAdapter): def save_user(self, request, user, form, commit=True): """ This is called when saving user via allauth registration. We override this to set additional data on user object. """ # Do not persist the user yet so we pass commit=False # (last argument) user = super(UserAccountAdapter, self).save_user(request, user, form, commit=False) user.age = form.cleaned_data.get('age') user.save()并且您还需要在设置中定义以下内容:
ACCOUNT_ADAPTER = 'api.adapter.UserAccountAdapter'
如果您有一个自定义的SignupForm可以在用户注册期间创建其他模型,并且您需要进行原子交易,除非所有数据都成功,否则这将阻止任何数据保存到数据库,这也很有用。
在
DefaultAdapter对Django的allauth节省了用户,所以如果你在一个错误
save的用户仍然会被保存到数据库自定义SignupForm的方法。
因此,对于任何面临此问题的人,您
CustomAdpater将看起来像这样
类UserAccountAdapter(DefaultAccountAdapter):
def save_user(self, request, user, form, commit=False): """ This is called when saving user via allauth registration. We override this to set additional data on user object. """ # Do not persist the user yet so we pass commit=False # (last argument) user = super(UserAccountAdapter, self).save_user(request, user, form, commit=commit) user.age = form.cleaned_data.get('age') # user.save() This would be called later in your custom SignupForm然后,您可以使用来装饰您的自定义SignupForm
@transaction.atomic
@transaction.atomicdef save(self, request, user): user.save() #save the user object first so you can use it for relationships ...



