Я работаю на странице, в которой перечислены компании и их сотрудники. Сотрудники имеют продажи. Они сохраняются в базе данных. Теперь мне нужно перечислить их все. Моя проблема в том, что текущее решение выполняется не быстро. Загрузка одной страницы занимает более 15 секунд.Листинг объектов базы данных
В настоящее время я сделал следующее:
companies = {}
employees = {}
for company in Company.objects.all():
sales_count = 0
sales_sum = 0
companies[company.id] = {}
companies[company.id]["name"] = company.name
for employee in company.employees.all():
employee_sales_count = 0
employee_sales_sum = 0
employees[employee.id] = {}
employees[employee.id]["name"] = employee.first_name + " " + employee.last_name
for sale in employee.sales.all():
employee_sales_count+= 1
employee_sales_sum += sale.total
employees[employee.id]["sales_count"] = employee_sales_count
employees[employee.id]["sales_sum"] = employee_sales_sum
sales_count += employee_sales_count
sales_sum += employee_sales_sum
companies[company.id]["sales_count"] = sales_count
companies[company.id]["sales_sum"] = sales_sum
Я новичок в Python, не уверен, если это «вещий» способ делать вещи.
Это 1500 запросов к базе данных со 100 компаниями и некоторыми сотрудниками и продажами для каждого. Как я должен улучшить свою программу, чтобы сделать ее эффективной?
Спасибо! Что, если я хочу их разбивать на страницы, используя сборку в Paginator? Поскольку мне нужно объединить эти словари, я мог бы просто использовать для этого пагинатор. Но это приведет к загрузке большого количества несвязанных данных. Поэтому, если я хочу показать 15 на страницу, у меня 500 загрузок. – MikkoP
Вы можете загружать и разбивать страницы на страницы до других данных, составлять список с идентификаторами компании и фильтровать Sales and Employees через company__in = id_list – ACimander
Да, теперь они выполняются очень быстро. Но как мне показать данные? Я не могу использовать '{{len (sales [company.id])}}' например, чтобы показать общую сумму заказов для одной компании. Я придумал это: http://pastebin.com/KDyzEUGD – MikkoP