我正在使用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])
创建了User
和UserProfile
个对象,但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()
答案 0 :(得分:0)
[
ACCOUNT_SIGNUP_FORM_CLASS
]应该实现'save'方法,接受新注册的用户作为其唯一参数。
看起来您没有提供这样的方法,因此用户永远不会连接到配置文件。而且我认为您没有看到错误,因为ModelForm
有一个save(commit=True)
方法恰好与此签名相匹配,即使它没有达到您想要的效果。