UserProfile缺少User对象

时间:2014-02-02 01:13:04

标签: python django django-allauth

我正在使用django-allauth的自定义注册表单。

settings.py

ACCOUNT_SIGNUP_FORM_CLASS = 'project.userprofile.form.UserSignupForm'

form.py

from django import forms
from models import UserProfile

class UserSignupForm(forms.ModelForm):
    class Meta:
        model = UserProfile
        fields = ('mobile_number',)

models.py

from django.db import models
from django.contrib.auth.models import User

class UserProfile(models.Model):
    user = models.ForeignKey(User, unique=True)
    mobile_number = models.CharField(max_length=30, blank=True, null=True)

User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0])

创建了UserUserProfile个对象,但UserProfile未与任何User对象关联。现在已经很晚了,我可能错过了一些愚蠢的事情,对吗?

更新 正如Kevin指出的那样,解决方法是在form.py中添加save方法。这就是它现在的样子:

from django import forms
from django.contrib.auth.models import User
from models import UserProfile

class UserSignupForm(forms.ModelForm):

    class Meta:
        model = UserProfile
        fields = ('mobile_number',)

    def save(self, user):
        profile = UserProfile(user=user)
        profile.mobile_number = self.cleaned_data['mobile_number']
        profile.save()

1 个答案:

答案 0 :(得分:0)

documentation说:

  

[ACCOUNT_SIGNUP_FORM_CLASS]应该实现'save'方法,接受新注册的用户作为其唯一参数。

看起来您没有提供这样的方法,因此用户永远不会连接到配置文件。而且我认为您没有看到错误,因为ModelForm有一个save(commit=True)方法恰好与此签名相匹配,即使它没有达到您想要的效果。