Optimize duedates in dashboards
This commit is contained in:
parent
4d4e202a24
commit
c1e1f38a27
|
|
@ -306,45 +306,28 @@ def get_dashboard_due_dates(request):
|
|||
course_sessions = get_course_sessions_with_roles_for_user(request.user)
|
||||
course_session_ids = [cs.id for cs in course_sessions]
|
||||
|
||||
all_due_dates = DueDate.objects.filter(
|
||||
course_session__id__in=course_session_ids
|
||||
)
|
||||
|
||||
# filter only future due dates
|
||||
due_dates = []
|
||||
today = date.today()
|
||||
for due_date in all_due_dates:
|
||||
# due_dates.append(due_date)
|
||||
if due_date.end:
|
||||
if due_date.end.date() >= today:
|
||||
due_dates.append(due_date)
|
||||
elif due_date.start:
|
||||
if due_date.start.date() >= today:
|
||||
due_dates.append(due_date)
|
||||
|
||||
due_dates.sort(key=lambda x: x.start)
|
||||
|
||||
# find course session by id in `course_sessions`
|
||||
# Fetch future due dates in a single query using Q objects for complex filtering
|
||||
future_due_dates = DueDate.objects.filter(
|
||||
Q(course_session_id__in=course_session_ids),
|
||||
Q(end__gte=today) | Q(start__gte=today)
|
||||
).select_related('course_session')
|
||||
|
||||
result_due_dates = []
|
||||
for due_date in due_dates:
|
||||
data = DueDateSerializer(due_date).data
|
||||
course_session_map = {cs.id: cs for cs in course_sessions}
|
||||
|
||||
for due_date in sorted(future_due_dates, key=lambda x: x.start):
|
||||
data = DueDateSerializer(due_date).data
|
||||
cs = course_session_map.get(due_date.course_session_id)
|
||||
|
||||
cs = next(
|
||||
course_session
|
||||
for course_session in course_sessions
|
||||
if course_session.id == due_date.course_session.id
|
||||
)
|
||||
if cs:
|
||||
data["course_session"] = _create_course_session_dict(
|
||||
cs, my_role=user_role(cs.roles), user_role=""
|
||||
)
|
||||
result_due_dates.append(data)
|
||||
|
||||
return Response(
|
||||
status=200,
|
||||
data=result_due_dates,
|
||||
)
|
||||
return Response(status=200, data=result_due_dates)
|
||||
|
||||
except PermissionDenied as e:
|
||||
raise e
|
||||
|
|
|
|||
Loading…
Reference in New Issue