无法将自定义字段保存到django-allauth - 之前的帖子没有帮助
我正在尝试为用户在注册时创建自定义字段,使用的是django-allauth。我参考了很多相关的帖子,但我无法让我的自定义表单保存到数据库里。在我的signup.html页面上,我确实看到了一个合并的表单,里面有用户名、密码1和2、电子邮件以及我额外添加的城市和学校字段,但我无法将这些额外字段保存到数据库中。我已经运行了syncdb,并且在管理区域看到了我的用户资料表。
这条建议是我离答案最近的,但我不太明白怎么实现:“你不能把UserProfileForm用作allauth.SIGNUP_FORM_CLASS。你需要从SignUpForm扩展它,并编写一个保存方法,这个方法只接受新创建的用户作为参数。”这段话来自这个帖子: 使用django-allauth的自定义注册表单
我还尝试过整合这些帖子中的建议: Django Allauth没有保存自定义表单 如何在使用django-allauth时自定义用户资料
这是我的代码: Models.py
from django.db import models
from django.contrib.auth.models import User
class UserProfile(models.Model):
# A required line - links a UserProfile to User.
user = models.OneToOneField(User)
# The additional attributes we wish to include.
school = models.CharField(max_length=128)
city = models.CharField(max_length=128)
def __unicode__(self):
return self.user.username
Forms.py
from django import forms
from django.contrib.auth.models import User
from myapp.models import UserProfile
from django.forms.widgets import HiddenInput
class UserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = ('city', 'school')
def signup(self, request, user):
user=User.objects.get(email=request.email)
city=request.POST.get('city','')
school=request.POST.get('school','')
userprofile_obj = UserProfile(user=user,city=city,school=school)
userprofile_obj.save()
Settings.py
ACCOUNT_SIGNUP_FORM_CLASS = 'myapp.forms.UserProfileForm'
我的模板是django-allauth模板中的基本Signup.html,我没有为此创建视图,虽然我尝试过从tangowithdjango的用户认证部分的注册视图中创建一个,但结果表现类似(没有保存到数据库)。
谢谢,
Kelly
1 个回答
不确定这个问题对最初提问的人来说是否仍然有效:如果是这样的话,还有其他人看到这个内容,也可以参考以下几点建议,帮助你朝着正确的方向前进:
我没有看到一个叫做
__init__()
的方法去调用父类?比如说:def __init__(self, *args, **kwargs): super(SignupForm, self).__init__(*args, **kwargs)
- 在注册方法中使用用户参数。这个参数应该已经有值,不要再重新加载它。
- 确保这两个对象正确链接(我没有用Django来建立我的个人资料表,所以可能会有所不同,但我设置了user.profile = Profile(...); 然后在我的signup()方法结束时执行user.profile.save())。
- 从表单的cleaned_data中获取要放入个人资料的值(例如,使用self.cleaned_data['city']而不是POST的数据)。
然后开始调试:你的signup()方法有没有被调用?它得到了什么?当你执行profile.save()方法时发生了什么?