Django 仅由配置文件所有者使用UserPasseStMixin访问编辑配置文件显示错误?

Django 仅由配置文件所有者使用UserPasseStMixin访问编辑配置文件显示错误?,django,django-models,django-views,django-templates,django-permissions,Django,Django Models,Django Views,Django Templates,Django Permissions,我已经为每个用户创建了配置文件页面,每个用户都应该编辑自己的配置文件。在模型中,我使用了AbstractUser模型。对于编辑访问,我导入了UserPasseStMixin 这是我的型号。py: class Profile(AbstractUser): name=models.CharField(max_length=30, blank=True) bio = models.TextField(max_length=500, blank=True) locati

我已经为每个用户创建了配置文件页面,每个用户都应该编辑自己的配置文件。在模型中,我使用了AbstractUser模型。对于编辑访问,我导入了UserPasseStMixin

这是我的型号。py

class Profile(AbstractUser):
    
    name=models.CharField(max_length=30, blank=True)
    bio = models.TextField(max_length=500, blank=True)
    location = models.CharField(max_length=30, blank=True)
    birthdate = models.DateField(null=True, blank=True)
class ProfileDetailView(DetailView):
    template_name='profile.html'
    model=Profile
    def get_user_profile(self,pk):
        return get_object_or_404(Profile,pk=pk)
    

class ProfileEditView(LoginRequiredMixin,UserPassesTestMixin,UpdateView):
    model=Profile
    template_name='profile_edit.html'
    fields=['name','bio','birthdate','location','gender',]
    login_url='login'
    success_url = reverse_lazy('home')
    def get_user_profile_edit(self,pk):
        return get_object_or_404(Profile,pk=pk)

    def test_func(self):
        obj = self.get_object()
        return obj.username == self.request.user

    
这是我的视图。py

class Profile(AbstractUser):
    
    name=models.CharField(max_length=30, blank=True)
    bio = models.TextField(max_length=500, blank=True)
    location = models.CharField(max_length=30, blank=True)
    birthdate = models.DateField(null=True, blank=True)
class ProfileDetailView(DetailView):
    template_name='profile.html'
    model=Profile
    def get_user_profile(self,pk):
        return get_object_or_404(Profile,pk=pk)
    

class ProfileEditView(LoginRequiredMixin,UserPassesTestMixin,UpdateView):
    model=Profile
    template_name='profile_edit.html'
    fields=['name','bio','birthdate','location','gender',]
    login_url='login'
    success_url = reverse_lazy('home')
    def get_user_profile_edit(self,pk):
        return get_object_or_404(Profile,pk=pk)

    def test_func(self):
        obj = self.get_object()
        return obj.username == self.request.user

    

问题是,当登录用户想要编辑其配置文件时,显示403禁止。没有用户可以编辑他们的配置文件。在测试功能中,应该使用什么来修复该问题?

由于
配置文件是用户模型,这意味着
obj
应该是
请求。用户

class ProfileEditView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
    model=Profile
    template_name='profile_edit.html'
    fields=['name','bio','birthdate','location','gender',]
    login_url='login'
    success_url = reverse_lazy('home')
    
    def get_user_profile_edit(self,pk):
        return get_object_or_404(Profile,pk=pk)

    def test_func(self):
        return self.get_object() == self.request.user
在这种情况下,视图不需要主键,因为访问视图的用户只需查看自己的配置文件即可进行编辑