Питонический способ извлечения данных в системе пользователей - PullRequest
0 голосов
/ 05 марта 2012

Диаграмму схемы моего проекта можно посмотреть ЗДЕСЬ .

  1. У меня есть Сотрудник, родитель которого является пользователем django.
  2. Сотрудник связан скомпания.В компании может быть много сотрудников.
  3. Сотрудник может иметь определенные задачи, и над каждой задачей работает много сотрудников.Следовательно, отношение m2m, связанное с таблицей с именем Emp_relatedTo_Task.

Для определенного представления я хочу получить все задачи для вошедшего в систему пользователя, компаний, связанных с этими задачами, и сотрудников, которые работаютв этих компаниях.

Что я достиг на этом пути:

emp = request.user.get_profile # get_profile fetches employee 

tasks_to_emp = Task.objects.filter(employee = emp).values_list("id")

user_list = EmployeeTask.objects.filter(task__in = tasks_to_emp).values_list("user")

employees = Employee.objects.filter(id__in = user_list)

company = [employee.company for employee in employees]
company = set(company)

Это любительский и менее эффективный способ выполнения задачи.Я посмотрел в select_related (), но он также выбирает только атрибуты Foreignkey.Любые хорошие предложения, чтобы сделать эту задачу максимально эффективной?

1 Ответ

0 голосов
/ 05 марта 2012

Вы забыли упомянуть, что такое project, но предполагая, что проект представляет собой список задач:

emp = Employee.objects.get(id=1) # example employee

# All employees that work for the same company as this employee
company_employees = Employee.objects.filter(company=emp.company)

# List of tasks for this employee, if your FK in Employee is called `task`
emp_tasks = Employee.task_set.all() 

# The company for this employee
company = emp.company
...