Python 如何检索模板中链接到其他对象的对象?德扬戈

Python 如何检索模板中链接到其他对象的对象?德扬戈,python,django,object,django-templates,django-views,Python,Django,Object,Django Templates,Django Views,我有一个测验模型和一个视图,其中我显示了页面上所有测验的列表。我想展示他们在每次测验中得到的分数。目前,我有一个分数模型,链接到每个测验和参加测验的用户。我想做一些类似于Score.objects.filter(user=request.user,quick=quick)的操作。获取_percentage()以显示该测验所达到的百分比。然而,这在模板代码中当然不起作用 def learn(request): #Quiz Screen context = { 'quizze

我有一个测验模型和一个视图,其中我显示了页面上所有测验的列表。我想展示他们在每次测验中得到的分数。目前,我有一个分数模型,链接到每个测验和参加测验的用户。我想做一些类似于
Score.objects.filter(user=request.user,quick=quick)的操作。获取_percentage()
以显示该测验所达到的百分比。然而,这在模板代码中当然不起作用

def learn(request): #Quiz Screen
    context = {
        'quizzes':Quiz.objects.all(),
        'scores':Score.objects.filter(user=request.user),
    }
    return render(request, 'quiz_app/learn.html', context)


{% extends "quiz_app/base.html" %}
{% block content %}
    <a href="{% url 'quiz-create' %}">New Quiz</a>
    {% for quiz in quizzes %}
        <a id="quiz-anchor" href="{% url 'quiz-detail' quiz.id %}">
            <article class="quiz-thumbnail-large">
                <h2>{{ quiz.title }}</h2>
                <h3>{{ quiz.question_amount }} Questions</h3>
                <p>Score: {{ quiz.score.get_percentage }}%</p>
            </article>
        </a>
    {% endfor %}
{% endblock content %}

因此,由于在
测验
分数
之间存在外键关系,因此一次测验可以有多个分数,因此应使用
测验
模型中的反向关系,如下所示:

{% extends "quiz_app/base.html" %}
{% block content %}
    <a href="{% url 'quiz-create' %}">New Quiz</a>
    {% for quiz in quizzes %}
        <a id="quiz-anchor" href="{% url 'quiz-detail' quiz.id %}">
            <article class="quiz-thumbnail-large">
                <h2>{{ quiz.title }}</h2>
                <h3>{{ quiz.question_amount }} Questions</h3>
                {% for score in quiz.score_set.all %}
                    <p>Score: {{ score.get_percentage }}%</p>
                {% endfor %}
            </article>
        </a>
    {% endfor %}
{% endblock content %}
{%extensed“quick\u app/base.html”%}
{%block content%}
{%用于测验中的测验%}
{%endfor%}
{%endblock内容%}
编辑 这是一个快速解决方案:

{% extends "quiz_app/base.html" %}
{% block content %}
    <a href="{% url 'quiz-create' %}">New Quiz</a>
    {% for quiz in quizzes %}
        <a id="quiz-anchor" href="{% url 'quiz-detail' quiz.id %}">
            <article class="quiz-thumbnail-large">
                <h2>{{ quiz.title }}</h2>
                <h3>{{ quiz.question_amount }} Questions</h3>
                {% for score in quiz.score_set.all %}
                    {% if score.user == request.user %}
                        <p>Score: {{ score.get_percentage }}%</p>
                    {% endif %}
                {% endfor %}
            </article>
        </a>
    {% endfor %}
{% endblock content %}
{%extensed“quick\u app/base.html”%}
{%block content%}
{%用于测验中的测验%}
{%endfor%}
{%endblock内容%}

但这不是一个好主意,因为您将首先检索所有用户的所有分数,然后过滤它们;最好在此处使用模板标记。

因此,由于
测验
分数
之间存在外键关系,一次测验可以有多个分数,因此应使用
测验
模型中的反向关系,如下所示:

{% extends "quiz_app/base.html" %}
{% block content %}
    <a href="{% url 'quiz-create' %}">New Quiz</a>
    {% for quiz in quizzes %}
        <a id="quiz-anchor" href="{% url 'quiz-detail' quiz.id %}">
            <article class="quiz-thumbnail-large">
                <h2>{{ quiz.title }}</h2>
                <h3>{{ quiz.question_amount }} Questions</h3>
                {% for score in quiz.score_set.all %}
                    <p>Score: {{ score.get_percentage }}%</p>
                {% endfor %}
            </article>
        </a>
    {% endfor %}
{% endblock content %}
{%extensed“quick\u app/base.html”%}
{%block content%}
{%用于测验中的测验%}
{%endfor%}
{%endblock内容%}
编辑 这是一个快速解决方案:

{% extends "quiz_app/base.html" %}
{% block content %}
    <a href="{% url 'quiz-create' %}">New Quiz</a>
    {% for quiz in quizzes %}
        <a id="quiz-anchor" href="{% url 'quiz-detail' quiz.id %}">
            <article class="quiz-thumbnail-large">
                <h2>{{ quiz.title }}</h2>
                <h3>{{ quiz.question_amount }} Questions</h3>
                {% for score in quiz.score_set.all %}
                    {% if score.user == request.user %}
                        <p>Score: {{ score.get_percentage }}%</p>
                    {% endif %}
                {% endfor %}
            </article>
        </a>
    {% endfor %}
{% endblock content %}
{%extensed“quick\u app/base.html”%}
{%block content%}
{%用于测验中的测验%}
{%endfor%}
{%endblock内容%}

但这不是一个好主意,因为您将首先检索所有用户的所有分数,然后过滤它们;最好在此处使用模板标记。

您可以发布示例预期输出吗看起来您需要在上下文词典中添加一个'quizscores':{quick\u id:score,…}项。您必须循环完成测验并查找每个分数(或创建自定义查询集以返回每个测验id的分数)。这将允许您在使用当前行对测验id和quizscores dict的引用呈现每个测验行时访问分数(在模板中索引dict值的地址如下:),因此您可以为每个
测验获得多个
分数,对吗?还请包括您的模型代码。@SukumarRdjf这将是一个所有测验标题的列表,以及他们有多少问题,但我还希望它显示如果已经进行了测验,则获得的百分比。@PedramParsian是的,但到目前为止,每个用户每个测验只能获得一分。我已经添加了modelscan you please post示例预期输出看起来您需要在上下文字典中添加一个'QuizCores':{quick_id:score,…}项。您必须循环完成测验并查找每个分数(或创建自定义查询集以返回每个测验id的分数)。这将允许您在使用当前行对测验id和quizscores dict的引用呈现每个测验行时访问分数(在模板中索引dict值的地址如下:),因此您可以为每个
测验获得多个
分数,对吗?还请包括您的模型代码。@SukumarRdjf这将是一个所有测验标题的列表,以及他们有多少问题,但我还希望它显示如果已经进行了测验,则获得的百分比。@PedramParsian是的,但到目前为止,每个用户每个测验只能获得一分。我已经添加了模型虽然它可以检索网站上所有用户的分数,但我希望它只显示从当前用户创建的分数(因为分数链接到测验和用户),尽管它可以检索网站上所有用户的分数,我希望它只显示从当前用户创建的分数(因为分数同时链接到测验和用户)