如何与django allauth进行定制注册?
我试图在注册时向用户询问一些其他信息。我正在使用django allauth进行授权和身份验证。我尝试在注册过程中再添加三个字段。如果我运行它,它会显示标准表单加性别字段。然而,它似乎并没有真正起作用。如何保存数据?有人能帮忙吗?提前谢谢你 编辑:如果我只是使用如何与django allauth进行定制注册?,django,django-models,django-forms,django-templates,django-allauth,Django,Django Models,Django Forms,Django Templates,Django Allauth,我试图在注册时向用户询问一些其他信息。我正在使用django allauth进行授权和身份验证。我尝试在注册过程中再添加三个字段。如果我运行它,它会显示标准表单加性别字段。然而,它似乎并没有真正起作用。如何保存数据?有人能帮忙吗?提前谢谢你 编辑:如果我只是使用 if form.is_valid(): form.save() return redirect('/success/') 我得到一个错误: save() missing 1 required positional ar
if form.is_valid():
form.save()
return redirect('/success/')
我得到一个错误:
save() missing 1 required positional argument: 'user'
我对django很陌生
我在项目中创建了注册应用程序
我把它放在allauth\u settings.py中:
ACCOUNT_SIGNUP_FORM_CLASS = 'signups.forms.MySignupForm'
from allauth.account.forms import SignupForm
from django import forms
from .models import UserProfile
class MySignupForm(SignupForm):
class Meta:
model = UserProfile
gender = forms.CharField(max_length=1, label='gender')
def save(self, user):
user.gender = self.cleaned_data['gender']
user.save()
from django.template import RequestContext
from django.shortcuts import render_to_response
from .forms import SignupForm
def index(request):
form = MySignupForm(request.POST or None)
if form.is_valid:
???
return render_to_response("signups/index.html", locals(),
context_instance=RequestContext(request))
我的注册/model.py:
from django.contrib.auth.models import User
from django.db import models
from allauth.account.models import EmailAddress
from allauth.socialaccount.models import SocialAccount
import hashlib
class UserProfile(models.Model):
user = models.OneToOneField(User, related_name='profile')
about_me = models.TextField(null=True, blank=True)
timestamp = models.DateTimeField(auto_now_add= True, auto_now=False)
updated = models.DateTimeField(auto_now_add= False, auto_now=True)
GENDER_CHOICES = (
('m', 'Male'),
('f', 'Female'),
)
# gender can take only one of the GENDER_CHOICES options
gender = models.CharField(max_length=1, choices=GENDER_CHOICES,
verbose_name='Gender')
def __unicode__(self):
return self.user.username
class Meta:
db_table = 'user_profile'
def profile_image_url(self):
"""
Return the URL for the user's Facebook icon if the user is logged in via
Facebook, otherwise return the user's Gravatar URL
"""
fb_uid = SocialAccount.objects.filter(user_id=self.user.id, provider='facebook')
if len(fb_uid):
return "http://graph.facebook.com/{}/picture?width=40&height=40".format(fb_uid[0].uid)
return "http://www.gravatar.com/avatar/{}?s=40".format(hashlib.md5(self.user.email).hexdigest())
def account_verified(self):
"""
If the user is logged in and has verified hisser email address, return True,
otherwise return False
"""
if self.user.is_authenticated:
result = EmailAddress.objects.filter(email=self.user.email)
if len(result):
return result[0].verified
return False
User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0])
我的注册/表格.py:
ACCOUNT_SIGNUP_FORM_CLASS = 'signups.forms.MySignupForm'
from allauth.account.forms import SignupForm
from django import forms
from .models import UserProfile
class MySignupForm(SignupForm):
class Meta:
model = UserProfile
gender = forms.CharField(max_length=1, label='gender')
def save(self, user):
user.gender = self.cleaned_data['gender']
user.save()
from django.template import RequestContext
from django.shortcuts import render_to_response
from .forms import SignupForm
def index(request):
form = MySignupForm(request.POST or None)
if form.is_valid:
???
return render_to_response("signups/index.html", locals(),
context_instance=RequestContext(request))
我的注册/视图.py:
ACCOUNT_SIGNUP_FORM_CLASS = 'signups.forms.MySignupForm'
from allauth.account.forms import SignupForm
from django import forms
from .models import UserProfile
class MySignupForm(SignupForm):
class Meta:
model = UserProfile
gender = forms.CharField(max_length=1, label='gender')
def save(self, user):
user.gender = self.cleaned_data['gender']
user.save()
from django.template import RequestContext
from django.shortcuts import render_to_response
from .forms import SignupForm
def index(request):
form = MySignupForm(request.POST or None)
if form.is_valid:
???
return render_to_response("signups/index.html", locals(),
context_instance=RequestContext(request))
我的index.html非常基本,我只是想看看表单的表示:
{% extends 'account/base.html' %}
{% block head_title %}ProjectName{% endblock %}
{% block content %}
<form method="POST" action="">
{{ form.as_p }}
<input type="submit">
</form>
{% endblock %}
{%extends'帐户/base.html%}
{%block head\u title%}项目名称{%endblock%}
{%block content%}
{{form.as_p}}
{%endblock%}
您正在实例化SignupForm
,它是视图中的标准表单,但不是您的MySignupForm
。更改如下:
def index(request):
form = MySignupForm()
return render_to_response("signups/index.html", locals(),
context_instance=RequestContext(request))
嗨,桑托什,谢谢你!我也设法找到了这个。我编辑了上面的代码。但是,即使我现在看到字段(带有性别),我也无法保存数据。如果我只使用If form.is_valid():form.save()返回重定向('/success/'),我会得到一个错误:save()缺少1个必需的位置参数:“user”可能是