Необходимо перебрать набор запросов ответов ученика и предоставить индивидуальное поле формы «обратной связи» для каждого - PullRequest
0 голосов
/ 21 мая 2019

Я создаю приложение базы данных домашних заданий, которое сделает ответ, оценку и исправление домашних заданий проще, чем сейчас.

Для этого у меня есть формы для студентов, чтобы заполнить ответ на заданный им вопрос, затем этот вопрос помечается как готовый для оценки, и тогда учитель может видеть все вопросы, которые готовы оценивать по заданию.

Проблема, с которой я сталкиваюсь, заключается в вставке поля формы в каждый ответ, где можно дать отзыв; Я полагаю, что самым простым способом было бы загрузить один вопрос и его ответ на страницу и иметь там поле формы обратной связи, но я хотел бы перебрать все вопросы, на которые даны ответы в заданном задании, и отобразить их все на одной странице, чтобы их можно было быстро оценить.

Я попытался вставить только поле формы в цикл for, но добился определенного успеха, но при отправке я не могу вытащить идентификатор вопроса из цикла, чтобы заполнить (обязательный) внешний ключ, указывающий из обратной связи. Модель на оригинальный вопрос-ответ.

Я поиграл с несколькими формами на странице, я попытался создать ответ и ответ типа форума, я попытался получить исходный идентификатор ответа из цикла for и отправить его обратно в форму, но я начинаю задумываться, а не вижу ли я чего-то простого, что происходит за кулисами и мешающего ему работать.

@login_required
@teacher_required
def list_ungraded_assignment_questions_by_scheduled_assignment(request, scheduled_assignment):
        need_to_be_evaluated_student_assignment_questions = StudentAssignmentQuestion.objects.filter(student_scheduled_class_assignment=scheduled_assignment).filter(needs_to_be_reviewed_by_teacher=True)
        need_to_be_evaluated_student_assignment_question_ids = []
        for assignment_question in need_to_be_evaluated_student_assignment_questions:
            need_to_be_evaluated_student_assignment_question_ids.append(assignment_question.id)

        student_assignment_question_answers = StudentAssignmentQuestionAnswer.objects.filter(student_assignment_question__in=need_to_be_evaluated_student_assignment_question_ids)

        context = {"need_to_be_evaluated_student_assignment_questions": need_to_be_evaluated_student_assignment_questions, "student_assignment_question_answers": student_assignment_question_answers}
        return render(request, "accelegraded/list_ungraded_assignment_questions_by_scheduled_assignment.html", context)
{% for student_assignment_question_answer in student_assignment_question_answers %}
                {% if student_assignment_question_answer.student_assignment_question.id == need_to_be_evaluated_student_assignment_question.id %}
                    <h6 style="background-color:DodgerBlue;">ANSWER: {{ student_assignment_question_answer }}</h6>
                    <h6 style="background-color:DodgerBlue;" ALIGN=RIGHT>Answered On: {{ student_assignment_question_answer.date_created }}</a></h6>
                    {% for student_assignment_question_answer_evaluation in student_assignment_question_answer_evaluations %}
                        {% if student_assignment_question_answer_evaluation.student_assignment_question_answer.id == student_assignment_question_answer.id %}
                            <h6 style="background-color:LightGreen;">RESPONSE: {{ student_assignment_question_answer_evaluation }}</h6>
                            <h6 style="background-color:LightGreen;">BY: {{ student_assignment_question_answer_evaluation.answer_evaluation_by }}</h6>
                            <h6 style="background-color:LightGreen;">AT: {{ student_assignment_question_answer_evaluation.answer_evaluation_by }}</h6>
                        {% endif %} 
                    {% endfor %}
            <div>
                <a class="btn btn-success btn-sm mt-1 mb-1" href="#">Correct</a>
                <a class="btn btn-info btn-sm mt-1 mb-1" href="#">Partial</a>
                <a class="btn btn-danger btn-sm mt-1 mb-1" href="#">Incorrect</a>
                <div class="content-section">
                    <form method="POST">
                        {% csrf_token %}
                        <fieldset class="form-group">
                            <legend class="border-bottom mb-4">Teacher Response</legend>
                            {{ form|crispy }}
                        </fieldset>
                        <div class="form-group">
                            <button class="btn btn-outline-info" type="submit">Submit</button>
                        </div>
                    </form>
                </div>
            </div>
                {% endif %}                 
            {% endfor %}

Ошибка, которую я получаю, когда пытаюсь сохранить входные данные в форме, заключается в том, что значение вопроса-ответа по умолчанию не возвращается, и я понятия не имею, как вернуть его обратно в форму для заполнения модели.

1 Ответ

0 голосов
/ 21 мая 2019

Вы должны воспользоваться преимуществами отношений между вашими моделями.

questions = StudentAssignmentQuestion.objects.filter(
    student_scheduled_class_assignment=scheduled_assignment,
    needs_to_be_reviewed_by_teacher=True,
).prefetch_related(
    'studentassignmentquestionanswer_set', # Or StudentAssignmentQuestionAnswer.question.related_name
)

Затем вы можете перебрать список следующим образом:

for question in questions:
    for answer in question.studentassignmentquestionanswer_set.all():
        print(answer)

Примечание: я думаю, что ваши имена пользователей слишком многословны. Например, needs_to_be_reviewed_by_teacher может быть needs_review или, если вам необходимо различить, что это относится только к учителю, а не администратору, тогда needs_teacher_review.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...