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

Django外键反向查询报错:如何通过Quiz的Slug获取关联题目?

解决Django中通过Quiz的slug查询关联题目的错误

错误根源

Quiz.quest_set.filter(slug=url)写法有误:quest_set是Quiz实例对象的反向关联管理器,不能直接通过Quiz类调用,这就是你遇到'ReverseManyToOneDescriptor' object has no attribute 'filter'错误的原因。

两种正确实现方案

方案1:先获取Quiz实例,再取关联题目

先通过slug定位到具体的Quiz对象,再用实例的quest_set获取所有关联题目:

from django.shortcuts import get_object_or_404

def questions(request, url):
    # 用get_object_or_404避免slug不存在时抛出500错误
    quiz = get_object_or_404(Quiz, slug=url)
    questions = quiz.quest_set.all()
    return render(request, 'quiz/questions.html', {'questions': questions})

方案2:直接从Quest模型正向过滤

利用外键的双下划线查询,直接在Quest模型中筛选关联Quiz的slug匹配的记录:

def questions(request, url):
    questions = Quest.objects.filter(quiz__slug=url)
    return render(request, 'quiz/questions.html', {'questions': questions})

模板展示示例

在quiz/questions.html中遍历题目数据:

{% for question in questions %}
    <div class="question-item">
        <h4>{{ question.question_text }}</h4>
        <div class="options">
            <p>1. {{ question.option_1 }}</p>
            <p>2. {{ question.option_2 }}</p>
        </div>
        <!-- 仅管理员可见正确答案 -->
        {% if user.is_staff %}
            <p class="correct-answer">正确答案:{{ question.corr_ans }}</p>
        {% endif %}
    </div>
{% empty %}
    <p>该测验暂未添加题目</p>
{% endfor %}

内容的提问来源于stack exchange,提问作者Syed Shehab Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:35:35