不保存自定义字段到django-allauth - 以前的帖子没有运气

时间:2014-08-26 01:30:20

标签: python django forms django-allauth

我正在尝试为用户创建自定义字段,以便使用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用户身份验证部分注册视图中创建一个,但我没有为此做出视图,这给出了类似的行为(不是保存到数据库中。)

谢谢, 凯利

1 个答案:

答案 0 :(得分:0)

不确定这对于原始海报是否仍然是一个活跃的问题/问题:如果是这样,并且对于遇到此问题的任何其他人,要纠正一些事情至少朝着正确的方向前进:

  • 我没有看到调用超类的__init__()方法? E.g:

    def __init__(self, *args, **kwargs): super(SignupForm, self).__init__(*args, **kwargs)

  • 将用户参数用于注册方法。它应该填充;不要重装。
  • 确保两个对象正确链接(我没有使用Django构建我的配置文件表,所以YMMV但是我设置了user.profile = Profile(...);然后执行user.profile.save()at我的signup()方法结束。
  • 从clean_data表单中获取要放入配置文件的值(例如,self.cleaned_data [' city']而不是POST。

然后开始调试:你的signup()方法被解雇了吗?它得到了什么?执行profile.save()方法会发生什么?