首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复制(且为空)用户是使用常规帐户注册创建的。

复制(且为空)用户是使用常规帐户注册创建的。
EN

Stack Overflow用户
提问于 2014-03-22 00:15:45
回答 1查看 195关注 0票数 0

我在我的项目中设立了django但是,当我使用常规的acoounts创建用户时,它会保存用户两次:(一个带有用户名)和(另一个没有用户名(这是空用户名)。因此,下次我尝试创建一个用户时,它会引发一个异常,因为用户名必须是唯一的,并且它是重复的,即空用户名。

它为每个信号设置接收器,并在处理每个信号时打印日志。然而,我只能将populate_username信号和email_confirmation_sent信号之间的问题隔离开来。

EN

回答 1

Stack Overflow用户

发布于 2014-03-22 12:01:31

在深入到源代码中,到处洒上日志后,我发现问题是由我使用的自定义Signup 造成的(我本来可以解决这个问题,但这并不容易)。

django-allauth手动保存用户,因此在我的示例中,表单模型默认保存方法再次这样做并导致错误。

正如文档中所指出的

这个类( ACCOUNT_SIGNUP_FORM_CLASS)应该实现一个def注册(self、request、user)方法,其中用户代表新注册的用户。

然而,这种评价是相当模糊的,而且(至少在我的情况下)很容易认为ACCOUNT_SIGNUP_FORM_CLASS可以是一种形式(不管是哪种形式)。

所以,我找到了两个解决方案:

  1. 将模型表单替换为常规窗体。然而,这一点在文档中并没有得到明确的解释。
  2. 重写ModelForm的save方法并跳过对父方法的调用

我实现了第二个,最后的表单如下:

代码语言:javascript
复制
class SignupForm(UserCreationForm):

    class Meta:
        model = get_user_model()
        fields = ('first_name', 'last_name', 'email')

    def save(self, commit=True):
        return None
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22571736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档