Как оптимизировать код listview, get_queryset в django
Мне надо отфильтровать объект и вывести его paginate, и получается я делаю это один раз в get_queryset и второй раз, уже в логике get_context_data, поскольку часть данных идет через контекст. Как не обращаться два раза к базе?
views
class OrdersHomeView(ListView):
paginate_by = 10
template_name = 'orders/orders_list.html'
context_object_name = 'orders'
def get_queryset(self):
category_filter = self.request.GET.get('category')
list_orders = Orders.objects.filter(category__category=category_filter)
return list_orders
def get_context_data(self, *, object_list=None, **kwargs):
context = super().get_context_data(**kwargs)
# здесь второй раз вызывает тоже самое, что в get_queryset, так как ниже идет работа с пагинацией
category_filter = self.request.GET.get('category')
list_orders = Orders.objects.filter(category__category=category_filter)
#paginator
paginator = Paginator(list_orders, self.paginate_by)
page = self.request.GET.get('page')
related = self.checkRelated()
related_list = []
if related:
for x in related:
modelPath = x.module_name + '.models'
app_model = importlib.import_module(modelPath)
cls = getattr(app_model, x.related_class_name)
for r in orders_page:
try:
cls2 = cls.objects.get(related_uuid=r.related_uuid)
related_get = cls2.get_related_data()
related_list.append(related_get)
except ObjectDoesNotExist:
pass
context['related_list'] = related_list
return context
def checkRelated(self):
related = Plugins.objects.get(module_name='orders')
return related.related.all()