Шаблон Django отображает аннотированные данные вместе с данными модели в пользовательском интерфейсе для объектов отношений "многие ко многим

Я ищу решение для отображения элементов данных модели вместе с аннотированными данными, например, у меня есть модель TestRun, которая имеет M2M отношения с TestCases, поэтому на странице UI для списка testruns хочу показать данные TsetRun вместе с количеством testcases, сгруппированных по их статусу.

e.g. TestRun.ID = 1, TestRun.Name = Regression
     Total TCs in TR = 4
     Passed TC = 2 | Blocked TC = 1 | Failed TC = 1

вместе с таблицей для каждой записи выполнения, чтобы показать вышеупомянутые 4 тестовых случая, например

TC_ID|TC_NAME|TC_STATUS|
1    |TC_101 | Passed  |
4    |TC_102 | Passed  |
5    |TC_105 | Failed  |
7    |TC_107 | Blocked |

У меня есть следующие модели

class TestRun(models.Model):
    testcases = models.ManyToManyField(TestCase, through="TestRunCases")
    project = models.ForeignKey(Project, related_name="project_testruns", on_delete=models.PROTECT)
    name = models.CharField(max_length=255)

class TestRunCases(models.Model):
    testcases = models.ForeignKey(TestCase, on_delete=models.CASCADE)
    testrun = models.ForeignKey(TestRun, on_delete=models.CASCADE)
    testcase_status = models.ForeignKey(TestCaseStatus, null=True, default=1, on_delete=models.PROTECT)

Я хочу показать количество тестовых случаев для каждого прогона со статусом, например. Для TestRun.id=1, Total TC#=3, Passed=2, Failed=1, шаблон, например, представлен ниже

Я попробовал использовать следующее в моих представлениях, используя CBV

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context["testcases"] = (
            TestRunCases.objects.filter(testrun_id__in=testrun_qs)
            .values("testrun_id", "testcase_status__status_value")
            .annotate(status_count=Count("id"))
        )
        return context

А в моем шаблоне

{% for testrun in object_list %}
  <div>
    {{ testrun.id }}-{{ testrun.name }}
      <div>
        {{ testrun.testcases.all.count }} Test Case{{ testrun.testcases.all.count|pluralize }}
        {% regroup testcases by testrun_id as tc_by_run %}
        {% for testrun_id in tc_by_run %}
          {% if testrun_id.grouper == testrun.id %}
            {% for tc_count_by_sts in testrun_id.list %}
              {{ tc_count_by_sts.status_count }} {{ tc_count_by_sts.testcase_status__status_value }}
            {% endfor %}
          {% endif %}
        {% endfor %}
      </div>
      <table>
        <thead>
          <tr>
            <th>Test Case Name</th>
            <th>Test Case Status</th>
          </tr>
        </thead>
        <tbody>
          {% for tr_item in testrun.testruncases_set.all %}
            <tr>
              <td>{{ tr_item.testcases.tcname }}</td>
              <td>{{ tr_item.testcase_status.status_value }}</td>
            </tr>
          {% endfor %}
        </tbody>
      </table>
  </div>
{% endfor %}

Is this the recommended way or this can be implemented using another approach.
Вернуться на верх