我正在扩展User
模型,以使用一对一关系添加个人资料信息。用户应该能够更改基本用户配置文件信息。
添加此类功能的views
应该是什么?
这是我的模特
Models.py
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
description = models.CharField(max_length=100, default='No description field')
city = models.CharField(max_length=100, default='Location not added')
phone = models.CharField(max_length=10, default='',blank= True)
image = models.ImageField(upload_to='products/profile/%Y%/%m/%d', blank=True)
def __str__(self):
return self.user.username
这是我的表格
forms.py
class UserForm(forms.ModelForm):
class Meta():
model = UserProfile
fields = ['description', 'city', 'phone', 'image']
我应该在视图中包含什么?
views.py
@login_required()
def edit_profile(request):
pass
我想通过扩展先前的信息( UserProfile )实例来更新模型,以使先前的信息被覆盖并且新的信息得到更新。
答案 0 :(得分:1)
您需要像其他任何常见形式一样处理视图中的UserForm
。
这里您需要做什么:
views.py
def edit_profile(request):
if request.method == 'POST':
# don't forget to pass request.FILES since you have imageField
form = UserForm(request.POST,
request.FILES,
instance=request.user.userprofile)
if form.is_valid():
form.save()
return redirect(reverse('to_user_profile_url'))
else:
form = UserForm(instance=request.user.userprofile)
context = {'form': form}
return render(request, 'edit_profile_template', context)