首页 > 解决方案 > 如何在 django 中执行 POST 请求后保留下拉列表的状态

问题描述

我有一个包含三个下拉列表的页面1. 选择问题类型2. 选择标记3. 可用标签,它们是QuestionFilterForm的一部分。然后<form>. 当我选择问题类型时,发布请求后的同一页面上会显示问题列表。然后我可以从新问题列表中选择一个或多个,这是另一个POST请求(将这些问题添加到另一个列表中)。当我尝试刷新页面时,在第二个POST请求之后,chrome 显示表单重新提交的更改。在这种情况下,我想在POST之后进行重定向,但随后使用redirect,我无法保留下拉列表中选择的选项。我每次都必须选择选项并查看问题列表。我想不出一个可以处理重定向问题的好逻辑。

我的看法如下

def design_questionpaper(request, course_id, quiz_id, questionpaper_id=None):
    context = {}
    user = request.user

    if quiz_id:
        quiz = get_object_or_404(Quiz, pk=quiz_id)

    if questionpaper_id is None:
        question_paper = QuestionPaper.objects.get_or_create(
            quiz_id=quiz_id
        )[0]
    else:
        question_paper = get_object_or_404(
            QuestionPaper, id=questionpaper_id, quiz_id=quiz_id
        )
    questions, state = None, None
    marks = request.POST.get('marks', None)
    state = request.POST.get('is_active', None)
    question_type = request.POST.get('question_type', None)
    if request.method == "POST":
        filter_form = QuestionFilterForm(request.POST, user=user)

        if question_type:
            questions = _get_questions(user, question_type, marks)

        if questions:
            questions = _remove_already_present(questionpaper_id, questions)


        if 'add-fixed' in request.POST:
            return redirect(
                'yaksh:designquestionpaper',
                course_id=course_id,
                quiz_id=quiz_id,
                questionpaper_id=questionpaper_id
            )
        # question_paper.update_total_marks()
        # question_paper.save()

        # context['qpaper'] = question_paper
        # context['questions'] = questions
    else:
        filter_form = QuestionFilterForm(user=user)

    fixed_questions = question_paper.get_ordered_questions()
    
    context['qpaper'] = question_paper
    context['questions'] = questions
    context['fixed_questions'] = fixed_questions
    context['filter_form'] = filter_form
    context['course_id'] = course_id
    context['state'] = state
    return render(request, 'yaksh/design_questionpaper.html', context)

标签: pythonpython-3.xdjango

解决方案


推荐阅读