用于单用户扩展用户模型的views.py以添加配置文件信息

时间:2018-07-21 11:29:15

标签: django django-models django-views one-to-one django-users

我正在扩展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 )实例来更新模型,以使先前的信息被覆盖并且新的信息得到更新。

1 个答案:

答案 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)