История изменений
Исправление Goury, (текущая версия) :
Просто закэшируй результат лайков, хоть в бд, хоть в джанге (не забыв принять взвешенное решение и записав его в диздок, чтобы потом делать одинаково везде, а не как попало).
Более продвинутый уровень — регулярно перекэшировать лайки, а функцией только из кэша брать данные.
Суперпродвинутый уровень — предсказывать запросы лайков и заранее кэшировать нужные, а менее нужные перекэшировать пореже.
Простой уровень: храни недавно лайканые элементы в ОЗУ.
Но вообще class Vote как-то мутно выглядит на первый взгляд. Но надо смотреть что там с архитектурой для выводов.
как такое сделать правильно
Смотреть надо на конкретный кейс в рамках конкретной ситуации. Я бы сделал модель с общими полями отдельно и в каждом элементе делал бы ссылку на модель с разными полями — тогда надо было бы выбрать пятерых из этой общей модели и довыбрать пятерых по ссылкам.
Исходная версия Goury, :
Просто закэшируй результат лайков, хоть в бд, хоть в джанге (не забыв принять взвешенное решение и записав его в диздок, чтобы потом делать одинаково везде, а не как попало).
Более продвинутый уровень — регулярно перекэшировать лайки, а функцией только из кэша брать данные.
Суперпродвинутый уровень — предсказывать запросы лайков и заранее кэшировать нужные, а менее нужные перекэшировать пореже.
Простой уровень: храни недавно лайканые элементы в ОЗУ.
Но вообще class Vote как-то мутно выглядит на первый взгляд. Но надо смотреть что там с архитектурой для выводов.