我正在尝试为用户创建自定义字段,以便使用django-allauth进行注册。我已经提到了几个关于此的帖子,但是我无法将自定义表单保存到我的数据库中。我在signup.html页面上获得了一个组合表单,其中包含用户名,密码1和2,电子邮件以及我在城市和学校的额外字段,但我无法将额外的字段保存到数据库中。我已经运行了syncdb,可以在管理区域中看到我的用户配置文件表。
这个建议是我最接近答案的,但我不明白如何实现它:"你不能将UserProfileForm用于allauth.SIGNUP_FORM_CLASS。您需要从SignUpForm扩展它并编写一个save方法,该方法将接受新创建的用户作为唯一参数,"从这篇文章: Custom registration form for use with django-allauth
我还试图在这些表格上整合这些帖子的建议: Django Allauth not saving custom form How to customize user profile when using 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用户身份验证部分注册视图中创建一个,但我没有为此做出视图,这给出了类似的行为(不是保存到数据库中。)
谢谢, 凯利
答案 0 :(得分:0)
不确定这对于原始海报是否仍然是一个活跃的问题/问题:如果是这样,并且对于遇到此问题的任何其他人,要纠正一些事情至少朝着正确的方向前进:
我没有看到调用超类的__init__()
方法? E.g:
def __init__(self, *args, **kwargs):
super(SignupForm, self).__init__(*args, **kwargs)
然后开始调试:你的signup()方法被解雇了吗?它得到了什么?执行profile.save()方法会发生什么?