【发布时间】:2018-02-27 16:26:44
【问题描述】:
我已经创建了用户配置文件模型。我迁移了模型以与数据库同步。但是,当我路由到/profile (whose url is this url(r'^profile$', views.update_profile, name="profile"),) 时,我收到User has no profile 的错误,它应该调用update_profile 视图,在检查它是否为POST 方法之前,我已经打印了request 对象,但它也没有显示在贝壳。我哪里做错了?
这是我的代码
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
bio = models.TextField(max_length=600, blank=True)
location = models.CharField(max_length=30, blank=True)
birth_date = models.DateField(blank=True, null=True)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
post_save.connect(create_user_profile, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
post_save.connect(save_user_profile, sender=User)
class UserForm(forms.ModelForm):
class Meta:
model = User
fields = ('first_name', 'last_name', 'email')
class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
exclude = ('user', )
def update_profile(request):
print('user ################', request.user, request.user.profile)
if request.method == 'POST':
user_form = UserForm(request.POST, instance=request.user)
profile_form = ProfileForm(
request.POST or None, instance=request.user.profile)
if user_form.is_valid() and profile_form.is_valid():
user_form.save()
profile_form.save()
messages.success(
request, ('your profile was successfully updated!'))
return redirect('products:profile')
else:
messages.error(
request, ('There was an error updating your profile'))
else:
user_form = UserForm(instance=request.user)
profile_form = ProfileForm(instance=request.user.profile)
return render(request, 'dashboard/company/profile.html', {'user_form': user_form, 'profile_form': profile_form})
【问题讨论】:
标签: python django python-3.x django-models django-forms