Как создать кверисет для каждого объекта в кверисете

Допустим, у меня есть модель Employees. Есть 3 различных названия, такие как "Топ-менеджер", "Менеджер по продажам" и "Торговый представитель" и поле "reports_to". Топ-менеджер ни перед кем не отчитывается, менеджеры по продажам отчитываются перед топ-менеджерами, а торговые представители - перед менеджерами. У меня есть представление списка для просмотра списка сотрудников, оно показывает сотрудников, которые подчиняются вышестоящему сотруднику, как описано выше. Также я пытаюсь вывести список сотрудников, которые подчиняются тем, кто подчиняется мне. Например, (Я вошел в систему как топ-менеджер)

  • - Вот идет менеджер по продажам
  • ---- Вот идут торговые представители этого менеджера

До сих пор я добился получения представителей менеджеров, но только для первого менеджера в кверисете. Вопрос в том, как мне получить отдельные наборы представителей для каждого менеджера в наборе? Дополнительный вопрос: правильно ли я использую здесь prefetch_related()? Просмотр:

def get_current_users_employee(user):
try:
    employee = Employees.objects.get(user=user)
    return employee
except User.DoesNotExist:
    raise Http404("Employee doesn't exist for this user.")


class EmployeesListView(LoginRequiredMixin, ListView):
model = Employees
template_name = 'employees/employees_list.html'
context_object_name = 'employees_list'
fields = ['last_name', 'first_name', 'title', 'birth_date', 'reports_to']

def dispatch(self, request, *args, **kwargs):
    handler = super().dispatch(request, *args, **kwargs)
    emp = get_current_users_employee(self.request.user)
    if (emp.title == "Sales representative"):
        raise PermissionDenied
    return handler

def get_queryset(self):
    current_emp = get_current_users_employee(self.request.user)
    return super().get_queryset().filter(reports_to=current_emp)

def get_context_data(self, **kwargs):
    context = super(EmployeesListView, self).get_context_data(**kwargs)
    context['salers'] = Employees.objects.prefetch_related('title').filter(reports_to__in=self.get_queryset())
    print(context)
    return context
Вернуться на верх