我在项目中设置了django-allauth,社交帐户工作得很好。但是,当我使用常规帐户创建用户时,它会向用户保存两次:一个用户名,另一个没有用户名(这是空用户名)。因此,下次我尝试创建用户时会引发异常,因为用户名必须是唯一的并且是重复的,即空用户名。
为每个信号设置接收器并在处理每个信号时打印日志。但是,我只能解决populate_username
信号和email_confirmation_sent
信号
答案 0 :(得分:1)
在深入了解源代码后,在任何地方撒上日志,我发现问题是由我使用的自定义注册模型表引起的(我本可以想出来但这并不容易)。
django-allauth手动保存用户,因此在我的情况下,表单模型默认保存方法再次执行并导致错误。
正如docs中指出的那样:
此类(ACCOUNT_SIGNUP_FORM_CLASS)应实现def注册(自我,请求,用户)方法,其中用户代表新注册的用户。
然而,欣赏是相当模糊的(至少在我的情况下),很容易认为ACCOUNT_SIGNUP_FORM_CLASS可以是一个表格(不论那种)。
所以,我找到了两个解决方案:
我实施了第二个,表格最终如下:
class SignupForm(UserCreationForm):
class Meta:
model = get_user_model()
fields = ('first_name', 'last_name', 'email')
def save(self, commit=True):
return None