Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带有get_对象的UserPasseTestMixin的test_func不适用于ListView_Python_Django_Django Class Based Views - Fatal编程技术网

Python 带有get_对象的UserPasseTestMixin的test_func不适用于ListView

Python 带有get_对象的UserPasseTestMixin的test_func不适用于ListView,python,django,django-class-based-views,Python,Django,Django Class Based Views,在我的项目仪表板的“联系人”部分中,保存的联系人仅对作者可见,但以前每个人都可见,因为我忘记在CBV中包含userpassestimixin。我包括但浏览器显示了名为NotImplemented test_func的错误,我还实现了test_func 视图.py class ContactListView(LoginRequiredMixin, UserPassesTestMixin, ListView): model = ClientContact template_name =

在我的项目仪表板的“联系人”部分中,保存的联系人仅对作者可见,但以前每个人都可见,因为我忘记在CBV中包含
userpassestimixin
。我包括但浏览器显示了名为NotImplemented test_func的错误,我还实现了test_func

视图.py

class ContactListView(LoginRequiredMixin, UserPassesTestMixin, ListView):
   model = ClientContact
   template_name = 'site/contacts.html'
   context_object_name = 'contacts'
   ordering = ['created_at', '-updated_at']

   def test_func(self):
       contact = self.get_object()
       if self.request.user == contact.author:
          return True
       return False
它再次指出,NotImplemented test_func以及get_Project在ListView中是一个未解析的引用
我肯定我做错了什么,但我找不到我的错误。如果有人知道这一点,请纠正我!谢谢

列表视图
用于显示多个对象,因此调用
get_object()
(它用于单个对象的视图,如
DetailView

列表视图的常用方法是覆盖
get\u queryset
,并过滤queryset以仅显示该用户的对象

class ContactListView(LoginRequiredMixin, ListView):
    model = ClientContact
    template_name = 'site/contacts.html'
    context_object_name = 'contacts'
    ordering = ['created_at', '-updated_at']

    def get_queryset(self):
        return super(ContactListView, self).get_queryset().filter(author=self.request.user)
您已经有了
LoginRequiredMixin
,它将处理用户未登录时的情况

如果要在多个列表视图中过滤查询集,可以编写一个mixin,例如:

class AuthorMixin(object):
    def get_queryset(self):
        return super(AuthorMixin, self).get_queryset().filter(author=self.request.user)
然后在您的视图中使用它:

class ContactListView(LoginRequiredMixin, AuthorMixin, ListView):
    ...

请注意,以上内容未经测试,它需要
LoginRequiredMixin
(因为它不处理匿名用户案例),并且仅当用户外键名为
author
时才起作用。您可以改进mixin,但您可能更愿意重复
get\u queryset
方法。

当您询问有关错误的问题时,请显示完整的回溯-它可以让您更清楚地了解错误的来源。谢谢@Alasdair它终于起作用了。我要问几个问题,因为我对django的每一个对象都是新手,我应该写这个queryset还是将它粘贴到文件中并调用它?在我的项目中,在用户注册之后还有一个叫做“点击完成”的步骤,用户可以在这里完成他们的个人资料。当用户被创建时,它会重定向到dashborad,它会自动重拨配置文件完成页面。我延迟了这一操作,因为它花费了很多时间。这就是为什么如果你不介意的话,请告诉我关于这些的想法?如果你想在基于类的视图中重用代码,正确的方法是使用mixin。我在上面添加了一个简单的示例。你关于用户创建的问题听起来像是一个单独的问题,所以我不能帮你。