Django order_by将查询集随机化两次?

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

我正在尝试将我正在研究的程序的查询集随机化。

full_quiz = Quiz.objects.get(name=quiz_name).questions.all()
form = TheForm(full_quiz)
if request.method == "POST":
    form = QuestionForm(request.GET, full_quiz)

根据我的测试,似乎查询集正在使用第二个form变量进行随机化。有任何解决办法吗?

谢谢

python django sqlite
1个回答
0
投票

您可以按照here所述获得随机订单查询集:

full_quiz = Quiz.objects.get(name=quiz_name).questions.order_by('?')

您尚未发布表单的代码,但我希望QuestionForm是ModelFormSet。您可以通过设置queryset arg来更改ModelFormSet的queryset(请参见docs):

form = QuestionForm(queryset=fullquiz)

所以在您看来,您可以像这样进行平滑处理:

def myview(request, quiz_name):

  if request.method == 'POST':
      form = QuestionForm(request.POST)
      if form.is_valid():
          # process data and redirect

  fullquiz = Quiz.objects.get(name=quiz_name).questions.order_by('?')
  form = QuestionForm(queryset=fullquiz)
  return render(request, 'yourtemplate.html', {'form': form })
© www.soinside.com 2019 - 2024. All rights reserved.