2013-05-01 79 views
0

models.py:用户注册 - 另一种模式

class Profile(models.Model): 
    user = models.OneToOneField(User, related_name='profile') 
    code = models.CharField('Invitation Code', max_length=32) 
    def __unicode__(self): 
     return self.user.first_name 

forms.py:

from app.models import Profile 

class RegistrationForm(forms.Form): 
    login = forms.CharField(label='Login', max_length=10, required=True) 
    name = forms.CharField(label='First name', max_length=10, required=True) 
    password0 = forms.CharField(label='Pass', max_length=32, required=True) 
    password1 = forms.CharField(label='Pass', max_length=32, required=True) 
    codeword = forms.CharField(label='Invitation code', max_length=32, required=True) 

模板使用:

<form action="{% url 'registration' %}" method="post">{% csrf_token %} 
{{ form.as_p }} 
<input type="submit" value="Submit" /> 
</form> 

views.py:

def registration(request): 
    if request.method == 'POST': 
     form = RegistrationForm(request.POST) 
     if form.is_valid() and form.cleaned_data['password0']==form.cleaned_data['password1'] and form.cleaned_data['rules_agree']: 
      try: 
       user = User.objects.create_user(form.cleaned_data['login'], password=form.cleaned_data['password0']) 
       user.first_name = form.cleaned_data['name'] 
       user.code = form.cleaned_data['codeword'] 
       user.save() 
      except IntegrityError: 
       error = 'Duplicate user' 
       return render(request, 'registration.html', {'form': form, 'error': error}) 

      return HttpResponseRedirect('/thanks') 
    else: 
     form = RegistrationForm() 
    return render(request, 'registration.html', {'form': form,}) 

因此,用户保存在数据库中,但配置文件模型为空。我尝试user.profile.code,但结果是一样的。如何解决它?谢谢。

+0

[创建一个扩展的用户简](http://stackoverflow.com/questions/1910359/creating-a-extended-user-profile) – 2013-05-01 08:37:37

+0

@Hedde我想这样做没有信号 – tim 2013-05-01 08:49:23

+0

的可能重复'code'不是'user'的属性,所以'user.code = form.cleaned_data ['codeword']'完全没有意义,它当然不会神奇地创建一个配置文件。要么在你的视图逻辑中创建一个'Profile'或者创建你自己的管理方法来实现自动化。 – 2013-05-01 09:03:17

回答

2

保存用户后,在您的视图中添加配置文件创建。

... 
... 
user.save() 
Profile.objects.create(user=user, code=form.cleaned_data['code'])