Django报错PostCreateView缺少test_func()方法实现该如何解决?
报错解决方案
直接报错原因
你给PostCreateView继承了UserPassesTestMixin,这个权限校验混入类强制要求子类必须实现test_func()方法返回布尔值来定义权限规则,你当前没有实现该方法所以触发报错。
具体修改点
- 修正
PostCreateView的继承逻辑与缺失方法
创建帖子的场景仅需校验用户登录状态,不需要额外的权限校验,直接移除多余的UserPassesTestMixin继承即可,同时补充form_valid方法自动绑定当前登录用户为帖子作者,避免后续存储时报作者字段为空的错误:
class PostCreateView(LoginRequiredMixin, CreateView): model = Post fields = ['title','content'] def form_valid(self, form): form.instance.author = self.request.user return super().form_valid(form)
- 修正
PostDeleteView的继承错误
你当前代码中PostDeleteView错误继承了CreateView(创建视图),和你注释标注的需求不符,改为继承DeleteView(删除视图)即可:
class PostDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView): model = Post success_url = '/' def test_func(self): post = self.get_object() return self.request.user == post.author
- 修正home视图的小瑕疵
context里的Post.objects.all缺少调用括号,会导致模板拿到的是方法对象而非帖子查询集,修改为:
context = { 'posts' : Post.objects.all() }
内容的提问来源于stack exchange,提问作者user14685964
相关产品推荐
相关产品推荐

