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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django order_by将查询集随机化两次?相关的知识,希望对你有一定的参考价值。

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

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变量进行随机化。有任何解决办法吗?

谢谢

答案

您可以按照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 })

以上是关于Django order_by将查询集随机化两次?的主要内容,如果未能解决你的问题,请参考以下文章

Django:没有重复的随机查询

C++ boost线程在实例化两次时导致分段错误

django查询集

Django告诉双重排序中具有特定属性的最后一项(order_by)

Django 查询性能

QSpacerItem 在实例化两次时使 pyQT 崩溃