Вложенные регруппы с django с некоторыми атрибутами из не вложенных регрупп

У меня есть шаблон django, в котором я реализовал регруппы. У меня возникла проблема, как отобразить некоторые атрибуты из моей модели в шаблоне в виде таблицы.

Мне нужно решить несколько вопросов:

  1. Как я могу отобразить оставшиеся 4 атрибута из модели ImplementationMatrix, т.е. implementation_status, implementation_summary, challenges и wayforward, чтобы они отображались в соответствующих колонках таблицы в шаблоне (index.html) без искажения макета для каждого экземпляра ImplementationMatrix.
  2. Последний цикл for в шаблонах отображает только один элемент для субактивности, в то время как у меня есть более чем субактивности для соответствующей деятельности.

Есть ли лучший способ реализовать все это?

Мои модели:

class Strategy(TrackingModel):
    """
    Stores all the strategies related to HSSP.
    """

    strategy_name = models.CharField(
        max_length=255, blank=True, null=True, default="")

    class Meta(TrackingModel.Meta):
        verbose_name_plural = "Strategies"

    def __str__(self):
        return self.strategy_name


class Intervention(TrackingModel):
    intervention_name = models.CharField(
        max_length=255, blank=True, null=True, default=""
    )
    strategy = models.ForeignKey(Strategy, on_delete=models.PROTECT)

    class Meta(TrackingModel.Meta):
        verbose_name_plural = "Interventions"

    def __str__(self):
        return self.intervention_name


class Activity(TrackingModel):
    activity_name = models.CharField(
        max_length=255, blank=True, null=True, default="")
    intervention = models.ForeignKey(Intervention, on_delete=models.PROTECT)

    class Meta(TrackingModel.Meta):
        verbose_name_plural = "Activities"

    def __str__(self):
        return self.activity_name


class SubActivity(TrackingModel):
    subactivity_name = models.CharField(
        max_length=255, blank=True, null=True, default=""
    )
    activity = models.ForeignKey(Activity, on_delete=models.PROTECT)

    class Meta(TrackingModel.Meta):
        verbose_name_plural = "Sub Activities"

    def __str__(self):
        return self.subactivity_name


class ImplementationMatrix(TrackingModel):
    """
    The class for keeping track the implementation of each action plan
    """
    IMPLEMENTATION_STATUS = (
        ("ON PROGRESS", "ON PROGRESS"),
        ("DONE", "DONE"),
        ("NOT DONE", "NOT DONE"),
    )

    implementation_summary = models.TextField()
    implementation_status = models.CharField(
        choices=IMPLEMENTATION_STATUS, max_length=100, default="",
        verbose_name="Matrix Implementation Status"
    )
    challenges = models.TextField()
    way_forward = models.TextField()
    sub_activity = models.ForeignKey(
        SubActivity, on_delete=models.PROTECT, verbose_name='Sub-Actions')

    def __str__(self) -> str:
        return self.sub_activity.activity.intervention.strategy.strategy_name

Мое мнение:

@login_required(login_url="/login")
def matrix_implementation_list(request: HttpRequest) -> HttpResponse:
    all_implementations = ImplementationMatrix.objects.filter(
            active=True, deleted=False).select_related(
                    'sub_activity',
                    'sub_activity__activity',
                    'sub_activity__activity__intervention',
                    'sub_activity__activity__intervention__strategy')

    context = {'all_implementations': all_implementations}
    return render(request, 'index.html', context)

Мой шаблон (index.html)

<div class="card-body">

{% regroup all_implementations by sub_activity.activity.intervention.strategy.strategy_name as strategy_list %}

<!-- Start Table section -->
<div class="table-responsive table-bordered">
    <table class="table">
        <thead class="thead-light">
            <tr>
                <th>Policy Statement</th>
                <th>Action</th>
                <th>Sub-Actions</th>
                <th>Implementation Summary</th>
                <th>Implementation Status</th>
                <th>Challenges</th>
                <th>Way Forward</th>
            </tr>
        </thead>
        {% for strategy in strategy_list %}
        <tr>
            <td colspan="7" class="text-center"><strong>Priority Area {{ forloop.counter }}: {{ strategy.grouper }}</strong></td>
        </tr>
            {% regroup strategy.list by sub_activity.activity.intervention.intervention_name as intervention_list %}
            {% for intervention in intervention_list %}

                {% regroup intervention.list by sub_activity.activity.activity_name as activity_list %}
                {% for activity in activity_list %}

                        {% regroup activity.list by sub_activity.subactivity_name as subactivity_list %}
                        {% for subactivity in subactivity_list %}
                            <tr>
                                {% if forloop.first %}
                                    {% if forloop.parentloop.first %}
                                        <td rowspan="{{ intervention.list|length }}">
                                            {{ intervention.grouper|wordwrap:30|linebreaksbr }}
                                        </td>
                                    {% endif %}
                                        <td rowspan="{{ activity.list|length }}">
                                            {{ activity.grouper|wordwrap:30|linebreaksbr }}
                                        </td>
                                {% endif %}

                                    <td>
                                        {{ subactivity.grouper|wordwrap:20|linebreaksbr }}
                                    </td>
                                    
                                    <td></td>
                                    <td></td>
                                    <td></td>
                                    <td></td>

                            </tr>
            {% endfor %}
        {% endfor %}
    {% endfor %}
{% endfor %}
    </table>
</div>
<!-- end Table Section -->

</div>

Заранее спасибо.

Я смог отобразить содержимое родительской модели в последнем 'for loop', сделав следующее:

<td>{{ subactivity.grouper|wordwrap:20|linebreaksbr }}</td>
<td>{{subactivity.list.0.implementation_summary|wordwrap:30|linebreaksbr}}</td>
<td>{{ subactivity.list.0.get_implementation_status_display }}</td>
<td>{{ subactivity.list.0.challenges|wordwrap:30|linebreaksbr }}</td>
<td>{{ subactivity.list.0.way_forward|wordwrap:30|linebreaksbr }}</td>

Вернуться на верх