from django.contrib.auth.mixins import UserPassesTestMixin from django.views.generic import TemplateView from django.views.generic.detail import DetailView from core.models import User class GeneratorView(TemplateView): template_name = "timetable/generator.jinja" class UserTimetableView(UserPassesTestMixin, DetailView): model = User pk_url_kwarg = "user_id" template_name = "timetable/user_timetable.jinja" def test_func(self) -> bool | None: return self.request.user.id == self.kwargs[ "user_id" ] or self.request.user.has_perm("timetable.view_timetable") def get_context_data(self, **kwargs): return super().get_context_data(**kwargs) | { "timetables": list(self.object.timetables.prefetch_related("slots")) }