def sum_orm_queries(plans: SmartDjangoQuery, cases: SmartDjangoQuery, runs: SmartDjangoQuery, target: str) -> QuerySet: """Search target objects together with selected relatives :return: a QuerySet object representing queried target objects. :rtype: QuerySet """ plans = plans.evaluate() cases = cases.evaluate() runs = runs.evaluate() if target == 'run': if plans is None and cases is None: if runs is None: runs = TestRun.objects.none() if runs is None: runs = TestRun.objects.all() if cases is not None: runs = runs.filter(case_run__case__in=cases).distinct() if plans is not None: runs = runs.filter(plan__in=plans).distinct() runs = runs.extra(select={'cases_count': RawSQL.total_num_caseruns}) return (runs.select_related('manager', 'default_tester', 'build__product', 'product_version').only( 'pk', 'summary', 'stop_date', 'manager__username', 'default_tester__username', 'build__product__name', 'product_version__value')) if target == 'plan': if cases is None and runs is None: if plans is None: plans = TestPlan.objects.none() if plans is None: plans = TestPlan.objects.all() if cases is not None: plans = plans.filter(case__in=cases).distinct() if runs is not None: plans = plans.filter(run__in=runs).distinct() return (TestPlan.apply_subtotal( plans, cases_count=True, runs_count=True).select_related( 'author', 'owner', 'type', 'product').only('pk', 'name', 'is_active', 'author__username', 'owner__username', 'product__name', 'type__name')) if target == 'case': if plans is None and runs is None: if cases is None: cases = TestCase.objects.none() if cases is None: cases = TestCase.objects.all() if runs is not None: cases = cases.filter(case_run__run__in=runs).distinct() if plans is not None: cases = cases.filter(plan__in=plans).distinct() return (cases.select_related( 'author', 'default_tester', 'case_status', 'category', 'priority').only('pk', 'summary', 'create_date', 'is_automated', 'is_automated_proposed', 'author__username', 'default_tester__username', 'case_status__name', 'category__name', 'priority__value'))