如何在Django中验证我的表单或视图,以便他们只能将用户模型编辑为属于该数据的用户模型?

时间:2017-07-17 14:36:15

标签: python django authentication

我有2个模型,我允许用户单独编辑,一个叫做User(Django默认身份验证),另一个叫UserProfile。

models.py(UserProfile)

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    avatar = models.ImageField(upload_to='avatar', default='avatar/default.png')
    header = models.ImageField(upload_to='header', default='header/default.png')
    bio = models.TextField(max_length=140, blank=True)
    website = models.URLField(max_length=200, blank=True)
    location = models.CharField(max_length=30, blank=True)
    date_birth = models.DateField(null=True, blank=True)

views.py

class UserUpdateView(generic.UpdateView):
    """
    This view is for editing only the User model. /edit/
    """
    model = User
    slug_field = 'username'
    form_class = UserForm
    template_name = 'user/user_edit.html'

1 个答案:

答案 0 :(得分:1)

首先,使用LoginRequiredMixin mixin,以便只有登录用户才能访问该视图。

然后,覆盖get_object方法,并返回要编辑的模型实例。

您不再需要网址中的用户名,因此您可以删除slug_field = 'username'

from django.contrib.auth.mixins import LoginRequiredMixin

class UserUpdateView(LoginRequiredMixin, generic.UpdateView):
    model = User
    form_class = UserForm
    template_name = 'user/user_edit.html'

    def get_object(self):
        return self.request.user

如果您有类似的视图来编辑用户个人资料,则会返回self.request.user.userprofile