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

Django报错AttributeError: 'function'对象无as_view属性

问题原因

AttributeError: 'function' object has no attribute 'as_view' 触发的核心逻辑是:urls.py中引用的views.QuizResultsView是函数对象而非类对象,函数不存在类视图专属的as_view()方法。
常见触发原因有两个:

  • views.py中定义完QuizResultsView类后,存在同名函数(多为旧版函数视图遗留代码),后者覆盖了类定义,导入到urls时实际拿到的是函数。
  • method_decorator使用不兼容:Django 2.1之前的版本不支持直接给method_decorator传入装饰器列表,这种写法会导致装饰器返回函数替代原类,触发报错。
修复步骤
  1. 先排查同名覆盖问题
    在views.py中全局搜索QuizResultsView,如果存在def QuizResultsView(...)形式的同名函数,直接删除或重命名该函数即可。
  2. 修复装饰器兼容性问题
    如果不存在同名函数,调整装饰器写法,不要直接传装饰器列表,改成嵌套装饰器形式,兼容所有Django版本:
from django.utils.decorators import method_decorator
from django.contrib.auth.decorators import login_required

# 分别装饰dispatch方法,替代原来的列表传参
@method_decorator(login_required, name='dispatch')
@method_decorator(teacher_required, name='dispatch')
class QuizResultsView(DetailView):
    model = Quiz
    context_object_name = 'quiz'
    template_name = 'classroom/teachers/quiz_results.html'
    # 其余类逻辑保持不变

同时确认你导入的method_decorator来自django.utils.decorators,不要导入其他第三方库的同名方法。

额外代码问题修复

你当前视图代码还有两个会触发运行错误的隐患,需要同步修改:

  • get_context_data方法中直接使用course_slug、quiz_slug变量会触发NameError,路由参数必须从self.kwargs中读取,且重复查询Quiz的冗余代码可以删除:
def get_context_data(self, **kwargs):
    # 先调用父类方法拿到默认上下文
    context = super().get_context_data(**kwargs)
    quiz = self.get_object()
    # 从路由参数中读取course_slug
    course = Course.objects.get(slug=self.kwargs['course_slug'])
    taken_quizzes = quiz.taken_quizzes.select_related('student__user').order_by('-date')
    total_taken_quizzes = taken_quizzes.count()
    quiz_score = quiz.taken_quizzes.aggregate(average_score=Avg('score'))
    context.update({
        'taken_quizzes': taken_quizzes,
        'total_taken_quizzes': total_taken_quizzes,
        'quiz_score': quiz_score,
        'total_questions':quiz.questions.count()
    })
    return context
  • get_queryset方法中仅读取了self.kwargs的参数但没有做任何过滤逻辑,如果需要按传入的course、quiz slug过滤结果,需要补充对应的过滤条件,否则仅返回当前用户关联的所有Quiz。

内容的提问来源于stack exchange,提问作者Destiny Franks

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 00:03:19