Дублирование запроса в Django приводит к медленной загрузке
У меня проблемы с поиском решения для дублированных запросов, я пробовал делать это.
Код:
for c in coupons:
fname = Users.objects.filter(
id=c['WhoReviewed']).values('first_name')
lname = Users.objects.filter(
id=c['WhoReviewed']).values('last_name')
for f in fname:
first = f['first_name']
for l in lname:
last = l['last_name']
full = first + ' ' + last
c['WhoReviewed'] = full
Результат:
Вы делаете два запроса на один купон. Вы можете получить всех пользователей с помощью одного запроса, а затем определить полные имена с помощью:
users = Users.objects.filter(
id__in=[c['WhoReviewed'] for c in coupons]
)
temp = {}
for user in users:
temp[user.id] = f'{user.first_name} {user.last_name}'
for c in coupons:
data = temp.get(int(c['WhoReviewed']))
if data is not None:
c['WhoReviewed'] = data
Однако моделирование выглядит немного "странно". Обычно следует ожидать, что модель coupon
(?) имеет ссылку ForeignKey
на модель User
, указывающую на человека, просмотревшего купон. Затем вы можете использовать .select_related(…)
[Django-doc], чтобы использовать запрос к купонам для немедленной загрузки связанных пользователей.