首页 > 解决方案 > “teamview”对象没有属性“get_object”

问题描述

我对 UserPassesTestMixin 有疑问,我想限制视图查看分配给经理的人员。它给了我一个“teamview”对象没有属性“get_object”的错误。

这是我有问题的views.py:

from django.shortcuts import render
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from django.views.generic import ListView, CreateView, DetailView
from .models import Job, Member
from profiles.models import User
from django.contrib.auth.decorators import login_required
# Create your views here.


class jobs(LoginRequiredMixin,ListView):
    model = Job
    template_name = 'users/user_jobs.html'
    context_object_name = 'jobs'

    def get_queryset(self):
        return Job.objects.filter(member__member=self.request.user)


class createdjobs(LoginRequiredMixin,ListView):
    model = Job
    template_name = 'users/manager_jobs.html'
    context_object_name = 'jobs'

    def get_queryset(self):
        return Job.objects.filter(manager__manager=self.request.user)


class teamview(LoginRequiredMixin,UserPassesTestMixin,ListView):
    model = Member
    template_name = 'users/manage_team.html'
    context_object_name = 'members'


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

    def get_queryset(self):
        return Member.objects.filter(manager__manager=self.request.user)



class jobdetail(LoginRequiredMixin,DetailView):
    model = Job


class createjob (LoginRequiredMixin,UserPassesTestMixin,CreateView):
    model = Job
    fields = ['member','title', 'description', 'file']

    def form_valid(self,form):
        form.instance.manager=manager.objects.get(manager=self.request.user)
        return super().form_valid(form)

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

希望你能帮我解决这个 TIA。

标签: pythondjangodjango-viewsmixins

解决方案


在你的class teamview(..., ..., ListView)你正在继承ListView。AListView没有get_object(),因为有多个对象。这是一个非常适合检查类视图中所有可用方法的站点:https ://ccbv.co.uk/projects/Django/3.0/django.views.generic.list/ListView/

旁注:我建议查看PEP8 样式指南并在您的编辑器中安装 linter 以遵循最佳实践。这将帮助其他开发人员阅读您的代码。


推荐阅读