首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在使用django-allauth时自定义用户配置文件

如何在使用django-allauth时自定义用户配置文件
EN

Stack Overflow用户
提问于 2012-09-06 23:30:15
回答 8查看 46.6K关注 0票数 114

我有一个带有django-allauth应用程序的django项目。我需要在注册时从用户那里收集额外的数据。我遇到了一个类似的question here,但不幸的是,没有人回答配置文件定制部分。

每个the documentation provided for django-allauth

ACCOUNT_SIGNUP_FORM_CLASS (=None)

指向自定义表单类(例如‘myapp.forms.SignupForm’)的字符串,在注册期间用于要求用户提供其他输入(例如时事通讯注册、出生日期)。这个类应该实现一个‘save’方法,接受新注册的用户作为它的唯一参数。

我是django的新手,正在为此而苦苦挣扎。有人能提供这样一个自定义窗体类的示例吗?我是否还需要添加一个模型类,其中包含指向用户对象的链接,如this

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-09-07 05:40:40

假设你想在注册时询问用户的名字/姓氏。您需要将这些字段放入您自己的表单中,如下所示:

代码语言:javascript
复制
class SignupForm(forms.Form):
    first_name = forms.CharField(max_length=30, label='Voornaam')
    last_name = forms.CharField(max_length=30, label='Achternaam')

    def signup(self, request, user):
        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']
        user.save()

然后,在您的设置中指向此表单:

代码语言:javascript
复制
ACCOUNT_SIGNUP_FORM_CLASS = 'yourproject.yourapp.forms.SignupForm'

请注意,不能通过ACCOUNT_FORMSSOCIALACCOUNT_FORMS在与表单覆盖相同的文件中定义SignupForm,因为这将导致循环导入错误。

就这样。

票数 176
EN

Stack Overflow用户

发布于 2014-06-16 00:13:44

使用pennersr建议的解决方案,我得到了一个DeprecationWarning:

代码语言:javascript
复制
DeprecationWarning: The custom signup form must offer a def signup(self, request, user) method DeprecationWarning)

这是因为保存方法已被弃用,取而代之的是def as of version 0.15 (request,user)方法。

因此,要解决此问题,示例的代码应如下所示:

代码语言:javascript
复制
class SignupForm(forms.Form):
    first_name = forms.CharField(max_length=30, label='Voornaam')
    last_name = forms.CharField(max_length=30, label='Achternaam')

    def signup(self, request, user):
        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']
        user.save()
票数 24
EN

Stack Overflow用户

发布于 2016-01-27 13:34:06

以下是我将其他几个答案结合在一起的方法(没有一个是100%完整和干练的)。

yourapp/forms.py

代码语言:javascript
复制
from django.contrib.auth import get_user_model
from django import forms

class SignupForm(forms.ModelForm):
    class Meta:
        model = get_user_model()
        fields = ['first_name', 'last_name']

    def signup(self, request, user):
        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']
        user.save()

settings.py

代码语言:javascript
复制
ACCOUNT_SIGNUP_FORM_CLASS = 'yourapp.forms.SignupForm'

通过这种方式,它使用模型表单,因此它是DRY,并使用新的def signup。我试着放入'myproject.myapp.forms.SignupForm',但不知何故导致了错误。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12303478

复制
相关文章

相似问题

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