Даже если вы не пишете l oop, вы все равно делаете циклы, например, для выборки из базы данных. Этот цикл не так уж и неэффективен. Что является неэффективным, так это выполнение семи запросов, потому что выполнение запроса, независимо от того, что это за запрос, уже само по себе является дорогостоящим.
Вы можете использовать ExtractWeekDay
выражение [Django -doc] , чтобы уменьшить количество запросов до один :
from django.db.models.functions import <b>ExtractWeekDay</b>
qs = BusinessShareInfo.objects.values(
<b>week_day=ExtractWeekDay('Date')</b>
).annotate(
Average=Avg('Turnover')
Max=Max('Turnover')
Min=Min('Turnover')
)
result = {
calendar.day_name[r['week_day']]: {
'Average': r['Average'],
'Max': r['Max'],
'Min': r['Min'],
}
for r in qs
}
Примечание : обычно имена полей в модели Django записываются в snake_case , а не в PerlCase , поэтому должно быть: date
вместо Date
.