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

2024-05-16 06:29:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个模型,我将允许用户分别编辑,一个叫做用户(Django default auth),另一个叫做UserProfile

models.py(用户配置文件)

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)

视图.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'

Tags: 用户pytruedefaultmodelslengthmaxclass
1条回答
网友
1楼 · 发布于 2024-05-16 06:29:24

首先,使用^{}mixin,这样只有登录的用户才能访问视图

然后,重写get_object方法,并返回要编辑的模型实例

您不再需要URL中的用户名,因此可以删除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

相关问题 更多 >