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
,但结果是一样的。如何解决它?谢谢。
[创建一个扩展的用户简](http://stackoverflow.com/questions/1910359/creating-a-extended-user-profile) – 2013-05-01 08:37:37
@Hedde我想这样做没有信号 – tim 2013-05-01 08:49:23
的可能重复'code'不是'user'的属性,所以'user.code = form.cleaned_data ['codeword']'完全没有意义,它当然不会神奇地创建一个配置文件。要么在你的视图逻辑中创建一个'Profile'或者创建你自己的管理方法来实现自动化。 – 2013-05-01 09:03:17