Как создать кверисет для каждого объекта в кверисете
Допустим, у меня есть модель 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