我有一个带有django-allauth应用程序的django项目。我需要在注册时从用户那里收集额外的数据。我遇到了一个类似的question here,但不幸的是,没有人回答配置文件定制部分。
每个the documentation provided for django-allauth
ACCOUNT_SIGNUP_FORM_CLASS
(=None
)
指向自定义表单类(例如‘myapp.forms.SignupForm’
)的字符串,在注册期间用于要求用户提供其他输入(例如时事通讯注册、出生日期)。这个类应该实现一个‘save’
方法,接受新注册的用户作为它的唯一参数。
我是django的新手,正在为此而苦苦挣扎。有人能提供这样一个自定义窗体类的示例吗?我是否还需要添加一个模型类,其中包含指向用户对象的链接,如this?
发布于 2012-09-07 05:40:40
假设你想在注册时询问用户的名字/姓氏。您需要将这些字段放入您自己的表单中,如下所示:
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()
然后,在您的设置中指向此表单:
ACCOUNT_SIGNUP_FORM_CLASS = 'yourproject.yourapp.forms.SignupForm'
请注意,不能通过ACCOUNT_FORMS
或SOCIALACCOUNT_FORMS
在与表单覆盖相同的文件中定义SignupForm
,因为这将导致循环导入错误。
就这样。
发布于 2014-06-16 00:13:44
使用pennersr建议的解决方案,我得到了一个DeprecationWarning:
DeprecationWarning: The custom signup form must offer a def signup(self, request, user) method DeprecationWarning)
这是因为保存方法已被弃用,取而代之的是def as of version 0.15 (request,user)方法。
因此,要解决此问题,示例的代码应如下所示:
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()
发布于 2016-01-27 13:34:06
以下是我将其他几个答案结合在一起的方法(没有一个是100%完整和干练的)。
在yourapp/forms.py
中
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
中
ACCOUNT_SIGNUP_FORM_CLASS = 'yourapp.forms.SignupForm'
通过这种方式,它使用模型表单,因此它是DRY,并使用新的def signup
。我试着放入'myproject.myapp.forms.SignupForm'
,但不知何故导致了错误。
https://stackoverflow.com/questions/12303478
复制相似问题