Вот оптимизированная версия вашего кода:
qs = Sitting.objects.filter(complete=True).values('user_id')
employees = Employee.objects.filter(id__in=qs)
Редактировать:
вам не нужен этот оператор map
, и было бы наиболее эффективно вызвать get_full_name
, пока вы перебираете свой набор запросов. Например:
qs = Sitting.objects.filter(complete=True).values('user_id')
employees = Employee.objects.filter(id__in=qs)
for employee in employees:
print(employee.get_full_name())
Или в шаблоне:
{% for employee in employees %}
<h1> {{ employee.get_full_name }}
{% endfor %}
Редактировать 2:
Я не совсем понимаю, почему вы хотите преобразовать свой набор запросов в список объектов, но, увы, вот вам go:
employees = [
{'user':user.get_full_name()}
for user in Employee.objects.filter(id__in=qs)
]
Я собираюсь предположить, что вы на самом деле не хотите, чтобы ваши данные выглядели так:
[{'user':'john doe'}, {'user':'jane doe'}]
Вот что я думаю, что вы хотите:
employees = Employee.objects.filter(id__in=qs)
[{'id':user.id, 'full_name':user.full_name} for user in employees]
Или как список кортежей:
[(user.id, user.full_name) for user in employees]