Python 如何在两个视图之间传递一组对象?

Python 如何在两个视图之间传递一组对象?,python,django,Python,Django,我正在构建一个测验应用程序,通过创建一个模型类将问题存储在数据库中。我从数据库中检索每个用户的随机问题集,然后将它们呈现在HTML页面上。问题是,在用户登录后,会出现一组随机问题,但刷新页面后该随机问题集将丢失。 我该如何解决这个问题 我想到的一件事是在另一个视图中检索对象集……比如在登录用户并将其作为字典传递给另一个视图之后。 但我找不到语法或任何函数(如果存在)。请帮忙。 我使用Django3.1和MySQL作为我的数据库。 My views.py如下所示: from django.shor

我正在构建一个测验应用程序,通过创建一个模型类将问题存储在数据库中。我从数据库中检索每个用户的随机问题集,然后将它们呈现在HTML页面上。问题是,在用户登录后,会出现一组随机问题,但刷新页面后该随机问题集将丢失。 我该如何解决这个问题 我想到的一件事是在另一个视图中检索对象集……比如在登录用户并将其作为字典传递给另一个视图之后。 但我找不到语法或任何函数(如果存在)。请帮忙。 我使用Django3.1和MySQL作为我的数据库。 My views.py如下所示:

from django.shortcuts import render, redirect
from .models import *
from .forms import UserForm
from django.contrib.auth.forms import AuthenticationForm
import random
from django.contrib.auth import login, logout, authenticate

# Create your views here.
def home(request):
    return render(request, 'testapp/home.html')

def loginuser(request):
    #form = UserForm()
    if request.method == 'GET':
        form = AuthenticationForm()
        return render(request, 'testapp/login.html', {'form':form})
    else:
        user = authenticate(request, username=request.POST['username'], password=request.POST['password'])
        if user is None:
            return render(request, 'testapp/login.html', {'form':AuthenticationForm(), 'error':'Username or password incorrect'})
        else:
            login(request, user)
            return redirect('paper')

def paper(request):
    #objects = Questions.objects.all()
    """count = Questions.objects.all().count()
    slice = random.random() * (count-5)
    objects = Questions.objects.all()[slice:slice+5]"""
    #objects = {{ objects }}
    objects = Questions.objects.all().order_by('?')[:5]
    return render(request, 'testapp/paper.html', {'objects':objects})

您可以使用
request.session
首次存储您的问题ID:

def纸张(请求):
如果request.session中没有'question_id':
request.session['question\u id']=list(Questions.objects.all().order\u by('?')).values\u list('id',flat=True)[:5])
objects=Questions.objects.filter(id\u in=request.session['question\u id'])
返回呈现(请求'testapp/paper.html',{'objects':objects})

您可以使用
请求.会话
首次存储您的问题ID:

def纸张(请求):
如果request.session中没有'question_id':
request.session['question\u id']=list(Questions.objects.all().order\u by('?')).values\u list('id',flat=True)[:5])
objects=Questions.objects.filter(id\u in=request.session['question\u id'])
返回呈现(请求'testapp/paper.html',{'objects':objects})

在args或kwargs等视图之间传递值实际上没有直接的方法。我建议使用请求会话来存储值并再次访问它们

def纸张(请求):
question\u set=Questions.object.all()
问题集=问题集。排序依据('?')[:5]
#从所选的5个问题中检索主键。
问题\u pks=问题\u集合值\u列表('pk',flat=True)
#将PK存储在请求会话的列表中。
request.session['question_id']=列表(question_pks)
上下文\数据={'objects':问题\集}
返回呈现(请求'testapp/paper.html',上下文数据)
def home(请求):
#再次从请求会话获取所有PK。
question\u pks=request.session['question\u id']
#使用pks从数据库中检索相同的问题对象。
question\u set=Questions.objects.filter(pk\u in=question\u pks)
上下文\数据={'objects':问题\集}
返回呈现(请求'testapp/home.html',上下文数据)

在args或kwargs等视图之间传递值实际上没有直接的方法。我建议使用请求会话来存储值并再次访问它们

def纸张(请求):
question\u set=Questions.object.all()
问题集=问题集。排序依据('?')[:5]
#从所选的5个问题中检索主键。
问题\u pks=问题\u集合值\u列表('pk',flat=True)
#将PK存储在请求会话的列表中。
request.session['question_id']=列表(question_pks)
上下文\数据={'objects':问题\集}
返回呈现(请求'testapp/paper.html',上下文数据)
def home(请求):
#再次从请求会话获取所有PK。
question\u pks=request.session['question\u id']
#使用pks从数据库中检索相同的问题对象。
question\u set=Questions.objects.filter(pk\u in=question\u pks)
上下文\数据={'objects':问题\集}
返回呈现(请求'testapp/home.html',上下文数据)