在多次调用的视图中重用查询集?

问题描述 投票:0回答:1

我有一个属于页面一部分的视图,我使用 HTMX 多次更新此视图(每次都是一个新问题,用户回答,然后显示下一个问题)。页面的其余部分不会重新加载。

我的问题是,每次更新视图以提出新问题时,它都会访问数据库以获取所有问题。有没有办法将所有问题传递到所有后续视图,而无需每次都访问数据库?我尝试将它传递给模板,然后返回视图,但这似乎是一个次优解决方案,而且我无论如何都无法让它工作(它没有将对象发送回视图,只是字符)。

这是视图.py:

@login_required
def question(request):
   questions = Question.objects.all()
if request.method == 'POST':
    ## do stuff with the users answer, get next question
    answer = (request.POST.get("answer"))
    return render(request, 'interview/question.html', context)

这是问题.html:

<form method="post">
            {% csrf_token %}
            <input class="input" name="answer" type="text"></input><br><br>
            <input type="submit" value="Next Question" class="is-fullwidth pg-button-secondary"
            hx-post="{% url 'interview:next_question' %}" 
            hx-target="#questionDiv" 
            hx-include="[name='answer']"
            hx-vals = '{"questionNumber": "{{ question.question_number}}", "questions": "{{ questions}}"}'
            hx-swap="innerHTML"></input>
          </form>
django django-views django-templates django-urls
1个回答
0
投票

如果您不愿意管理缓存存储的额外复杂性,您可以使用memcached


如果你也不想使用它,那么就这样做:

@login_required
def question(request):
    if not hasattr(question, 'questions'):
        question.questions = Question.objects.all()
    •••

查询被保存为函数

question
的静态变量,并且在连续的函数调用中都是相同的。数据库在第一次命中后就不会再被命中。要使用 QuerySet,您可以像这样访问它:

_usage = question.questions
© www.soinside.com 2019 - 2024. All rights reserved.