Как выводить объекты Queryset'а по одному?

281
10 февраля 2017, 02:33

Идея такая: фильтром выбрать из базы несколько элементов (вопросов к тесту). Далее надо выводить эти элементы по одному. Сначала выводим первый вопрос теста, когда пользователь ответил - второй, и так далее. И чтобы это происходило без обновления страницы. Не могу понять как это реализовать. Как отслеживать какой вопрос выведен и как выбирать следующий, после ответа. Вроде как нужен ajax. Если да, то что писать во вью. И в запросе?

def index(request, course_id, test_task_id):
    test = Test_task.objects.get(id = test_task_id)
    test_question_list = Test_question.objects.filter(test_task = test_task_id)
    for t in test_question:
        answer_test_list = Answer_test.objects.filter(test_question = t.id)
   if request.user.is_authenticated():
        if request.method == "POST" and request.is_ajax():
         #что делать если на вопрос ответили
        else:
         #как вывести первый вопрос
            context = {'test': test,'test_question' : test_question, 'answer_test' : answer_test, 'course_id':course_id}
            return render(request, 'test_task/test_task.html', context)
else:
    return redirect("user_profile:login_view")

Все вопросы выводятся так:

    <h3>Тест. {{ test.name_test }}</h3>
    <div class="question-panel">
        {% for t in test_question %}
        <div class="question_text" data-num="{{t.id}}">
            {{t.question_text|linebreaksbr}}
        </div>
        <div class="list-group"><div>
            {% for answer in answer_test %}
             <a id="v_1" class="list-group-item questvariant" data-num="{{answer.id}}"> {{ answer.answer }}</a>
            {% endfor %}
        </div></div>
    {% endfor %}
    </div>

Пыталась как-то так делать запрос:

$(" .questvariant").click( function(e){
    e.preventDefault();
    var quest_id = $(".question_text").data("num");
    var var_id = $(this).data("num");
    var data = {
        'quest_id' : quest_id,
        'var_id' : var_id,
    };
     alert(data);
    $.ajax({
        type: "POST",
        url: "/test/1/1/",
        data: data,
        cache: false,
        success: function(data){
        }
   });
});
READ ALSO
Определить верные координаты при клике SIGMA.JS

Определить верные координаты при клике SIGMA.JS

ЗдравствуйМне при клике на граф sigma

297
overflow и высота блока в %

overflow и высота блока в %

столкнулся с проблемой, в общем на сайте в body должен быть отключен скролл, а у левого блока он должен присутствовать, все работает, но только...

361
Адаптивная верстка: меню

Адаптивная верстка: меню

В моем шаблоне есть горизонтальное меню - обычное ul с ссылкамиИспользую фреймворк Skeleton, поэтому шаблон адаптивный

273