[Answered ]-Django class-based-view access context data from get_queryset

2👍

You can move getting profile out of get_context_data to upper function, like dispatch, or use cached_property decorator. This way your profile will be stored in _profile argument of view and you will not do second get to DB after calling self.profile second time.

from django.utils.functional import cached_property

class ProfileContextMixin(generic_base.ContextMixin, generic_view.View):
    @cached_property
    def profile(self):
        return get_object_or_404(Profile, user__username=self.request.user)

    def get_context_data(self, **kwargs):
        context = super(ProfileContextMixin, self).get_context_data(**kwargs)
        context['profile'] = self.profile
        return context

class CourseListView(ProfileContextMixin, generic_view.ListView):
    model = Course
    template_name = 'course_list.html'
    object_list = None

    def get_queryset(self):
        return super(CourseListView, self).get_queryset().filter(creator=self.profile)

Leave a comment