2012-04-20 66 views
1

在注册时,我想要求用户为:扩展与自定义字段用户模型形式

  • 全名(我想将其保存为虽然姓和名)
  • 公司名称
  • 电子邮件
  • 密码

我已经通过几十个在计算器上类似的情况读取。在models.py,我扩展了用户模型像这样:

# models.py 
class UserProfile(models.Model): 
    company = models.CharField(max_length = 50) 
    user = models.OneToOneField(User) 

def create_user_profile(sender, instance, created, **kwargs): 
    if created: 
    profile, created = UserProfile.objects.get_or_create(user=instance) 

post_save.connect(create_user_profile, sender=User) 

来源:Extending the User model with custom fields in Django

我还补充说:

# models.py 

class SignupForm(UserCreationForm): 
    fullname = forms.CharField(label = "Full name") 
    company = forms.CharField(max_length = 50) 
    email = forms.EmailField(label = "Email") 
    password = forms.CharField(widget = forms.PasswordInput) 

class Meta: 
    model = User 
    fields = ("fullname", "company", "email", "password") 

def save(self, commit=True): 
    user = super(SignupForm, self).save(commit=False) 
    first_name, last_name = self.cleaned_data["fullname"].split() 
    user.first_name = first_name 
    user.last_name = last_name 
    user.email = self.cleaned_data["email"] 
    if commit: 
    user.save() 
    return user 

而且在views.py:

# views.py 

@csrf_exempt 
def signup(request): 
    if request.method == 'POST': 
    form = SignupForm(request.POST) 
    if form.is_valid(): 
     new_user = form.save() 
     first_name, last_name = request.POST['fullname'].split() 
     email = request.POST['email'] 
     company = request.POST['company'], 
     new_user = authenticate(
     username = email, 
     password = request.POST['password'] 
    ) 
     # Log the user in automatically. 
     login(request, new_user) 

现在,它不存储公司名称。我怎么做?

回答

2
user_profile = new_user.get_profile() 
user_profile.company = company 
user_profile.save() 

不要忘了配置设置您的用户配置类,以便Django知道什么对user.get_profile返回()

+0

完美,谢谢! – Konrad 2012-04-21 04:23:19