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_sessions = get_course_sessions_with_roles_for_user(request.user)
|
||||||
course_session_ids = [cs.id for cs in course_sessions]
|
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()
|
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)
|
# Fetch future due dates in a single query using Q objects for complex filtering
|
||||||
|
future_due_dates = DueDate.objects.filter(
|
||||||
# find course session by id in `course_sessions`
|
Q(course_session_id__in=course_session_ids),
|
||||||
|
Q(end__gte=today) | Q(start__gte=today)
|
||||||
|
).select_related('course_session')
|
||||||
|
|
||||||
result_due_dates = []
|
result_due_dates = []
|
||||||
for due_date in due_dates:
|
course_session_map = {cs.id: cs for cs in course_sessions}
|
||||||
data = DueDateSerializer(due_date).data
|
|
||||||
|
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:
|
if cs:
|
||||||
data["course_session"] = _create_course_session_dict(
|
data["course_session"] = _create_course_session_dict(
|
||||||
cs, my_role=user_role(cs.roles), user_role=""
|
cs, my_role=user_role(cs.roles), user_role=""
|
||||||
)
|
)
|
||||||
result_due_dates.append(data)
|
result_due_dates.append(data)
|
||||||
|
|
||||||
return Response(
|
return Response(status=200, data=result_due_dates)
|
||||||
status=200,
|
|
||||||
data=result_due_dates,
|
|
||||||
)
|
|
||||||
|
|
||||||
except PermissionDenied as e:
|
except PermissionDenied as e:
|
||||||
raise e
|
raise e
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue