You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 00:24:02