Select related data

This commit is contained in:
Christian Cueni 2024-07-22 14:59:53 +02:00
parent 69ea3c8c17
commit 9424979bef
2 changed files with 19 additions and 18 deletions

View File

@ -17,7 +17,7 @@ def query_competence_course_session_assignments(course_session_ids, circle_ids=N
AssignmentType.CASEWORK.value, AssignmentType.CASEWORK.value,
], ],
learning_content__content_assignment__competence_certificate__isnull=False, learning_content__content_assignment__competence_certificate__isnull=False,
): ).select_related("submission_deadline", "learning_content"):
if circle_ids and csa.learning_content.get_circle().id not in circle_ids: if circle_ids and csa.learning_content.get_circle().id not in circle_ids:
continue continue
result.append(csa) result.append(csa)
@ -34,7 +34,7 @@ def query_competence_course_session_edoniq_tests(course_session_ids, circle_ids=
for cset in CourseSessionEdoniqTest.objects.filter( for cset in CourseSessionEdoniqTest.objects.filter(
course_session_id__in=course_session_ids, course_session_id__in=course_session_ids,
learning_content__content_assignment__competence_certificate__isnull=False, learning_content__content_assignment__competence_certificate__isnull=False,
): ).select_related("deadline", "learning_content"):
if circle_ids and cset.learning_content.get_circle().id not in circle_ids: if circle_ids and cset.learning_content.get_circle().id not in circle_ids:
continue continue
result.append(cset) result.append(cset)

View File

@ -2,12 +2,12 @@ import math
from typing import List from typing import List
import graphene import graphene
from django.db import connection, reset_queries
import vbv_lernwelt.assignment.models import vbv_lernwelt.assignment.models
from vbv_lernwelt.assignment.models import ( from vbv_lernwelt.assignment.models import (
AssignmentCompletion, AssignmentCompletion,
AssignmentCompletionStatus, AssignmentCompletionStatus,
AssignmentType,
) )
from vbv_lernwelt.competence.services import ( from vbv_lernwelt.competence.services import (
query_competence_course_session_assignments, query_competence_course_session_assignments,
@ -176,6 +176,9 @@ def assignments(
circle_ids: List[graphene.ID] | None = None, circle_ids: List[graphene.ID] | None = None,
urql_id: str = None, urql_id: str = None,
) -> AssignmentsStatisticsType: ) -> AssignmentsStatisticsType:
import structlog
logger = structlog.get_logger()
if urql_id is None: if urql_id is None:
urql_id = str(course_id) urql_id = str(course_id)
@ -184,22 +187,20 @@ def assignments(
) )
records: List[AssignmentStatisticsRecordType] = [] records: List[AssignmentStatisticsRecordType] = []
for course_session in course_sessions: reset_queries()
for csa in query_competence_course_session_assignments( csas = query_competence_course_session_assignments(course_sessions, circle_ids)
[course_session.id], circle_ids csets = query_competence_course_session_edoniq_tests(course_sessions, circle_ids)
):
record = create_record(csa, user_selection_ids, urql_id_postfix=urql_id)
records.append(record)
for cset in query_competence_course_session_edoniq_tests( for csa in csas:
[course_session.id], circle_ids record = create_record(csa, user_selection_ids, urql_id_postfix=urql_id)
): records.append(record)
record = create_record(
course_session_assignment=cset, for cset in csets:
user_selection_ids=user_selection_ids, record = create_record(cset, user_selection_ids, urql_id_postfix=urql_id)
urql_id_postfix=urql_id, records.append(record)
)
records.append(record) num_queries = len(connection.queries)
logger.info(f"cset number of queries executed: {num_queries}")
return AssignmentsStatisticsType( return AssignmentsStatisticsType(
_id=urql_id, # noqa _id=urql_id, # noqa