【发布时间】:2017-04-17 15:44:24
【问题描述】:
当我提交包含用户信息(用户名、电子邮件、密码)和用户个人资料(名字和姓氏)的注册表单并在我的views.py 中调用form.save() 和profileform.save() 等保存时那么一切似乎都很好,我没有收到任何错误。
但是,当我进入 Django Admin 时,我看到用户配置文件和配置文件已分别保存。
所以有两个不同的配置文件,一个包含我在表单中输入的用户名,另一个包含名字和姓氏(如图所示)。
这是我的观点.py:
def signup(request):
if request.method == 'POST':
form = UserRegistrationForm(data=request.POST)
profileform = UserRegistrationProfileForm(data=request.POST)
if form.is_valid() and profileform.is_valid():
user = form.save()
profileform.save()
if user is not None:
if user.is_active:
user_login(request, user, backend='django.contrib.auth.backends.ModelBackend')
return redirect('/dashboard/')
else:
form = UserRegistrationForm()
profileform = UserRegistrationProfileForm()
return render(request, 'signup-user.html', {'form': form, 'profileform': profileform})
Forms.py(用于表单的配置文件部分):
class UserRegistrationProfileForm(forms.ModelForm):
user_fname = forms.CharField(#)
user_lname = forms.CharField(#)
class Meta:
model = UserProfileModel
fields = ['user_fname', 'user_lname']
def clean(self):
#...
def save(self, commit=True):
profile = super(UserRegistrationProfileForm, self).save(commit=False)
if commit:
profile.save()
return profile
Models.py(用于配置文件,包括接收器信号):
class UserProfileModel(models.Model): # For the Company Employees
user = models.OneToOneField(UserModel, related_name='userprofilemodel', on_delete=models.CASCADE, blank=True, null=True)
user_fname = models.CharField(max_length=30, verbose_name='First Names')
user_lname = models.CharField(max_length=30, verbose_name='Last Name')
class Meta:
verbose_name = 'Profile'
def __unicode__(self):
#...
def save(self, *args, **kwargs):
super(UserProfileModel, self).save(*args, **kwargs)
@receiver(post_save, sender=UserModel)
def create_user_profile(sender, instance, created, **kwargs):
if created:
UserProfileModel.objects.create(user=instance)
@receiver(post_save, sender=UserModel)
def save_user_profile(sender, instance, **kwargs):
instance.userprofilemodel.save()
不确定我做错了什么?我希望表单创建一个用户配置文件,其中包含用户实例作为用户,以及名字和姓氏。
关于我哪里出错了有什么想法吗?
更新
这是UserRegistrationForm 类:
class UserRegistrationForm(forms.ModelForm):
#
class Meta:
model = UserModel
fields = ['related_company_slug', 'username', 'user_email', 'password', 'passwordrepeat']
def clean(self):
#
def save(self, commit=True):
self.check_company
user = super(UserRegistrationForm, self).save(commit=False)
user.set_password(self.cleaned_data.get('password'))
user.is_active = True
if commit:
user.save()
return user
【问题讨论】:
-
我们能看到
UserRegistrationForm类吗? -
我已经更新了我的问题@MattCremeens