Django 用户注册-另一种模式
models.py: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
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'])