Django 用户注册-另一种模式

Django 用户注册-另一种模式,django,Django,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.mod

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>

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

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

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

@Hedde的可能副本我想在没有信号的情况下执行此操作
code
不是
user
的属性,因此
user.code=form.cleaned_data['codeword']
毫无意义,它肯定不会神奇地创建配置文件。在视图逻辑中创建一个
配置文件
,或者创建自己的自动化管理器方法。
...
...
user.save()
Profile.objects.create(user=user, code=form.cleaned_data['code'])