Отображение таблицы в шаблоне Django с дополнительными столбцами с использованием отношения "многие ко многим" - PullRequest
0 голосов
/ 14 июля 2020

Я создаю приложение для отслеживания Dynami c в Django, но мне трудно показать реляционные данные в таблице.

В приложении Activity может быть определено, которое может содержать 0 или более ActivityMetri c s. Когда пользователь регистрируется, выполнив Activity , создается Entry , а введенные им показатели сохраняются как несколько ActivityMetricInstance s. Однако при регистрации Entry ActivityMetri c s являются необязательными, что приводит к моим проблемам с отображением данных в таблице.

Чтобы дать полный пример, Я создал Activity под названием «Example Activity». Это Activity имеет 3 ActivityMetrics : Metri c 1, Metri c 2 и Metri c 3. Я создал 2 Entries вот так:

Entry   Metric 1          Metric 2          Metric 3
------------------------------------------------------------
Entry2  #2 Metric 1 Data                    #2 Metric 3 Data
Entry1  #1 Metric 1 Data  #1 Metric 2 Data  #1 Metric 3 Data

Однако при отображении этих данных в таблице с использованием языка шаблонов Django происходит следующее: enter image description here

This is the code I used for the template:

  Дата  {% if activity_metrics%} {% для activity_metri c в activity_metrics%} {{activity_metri c .name}}  {% endfor%} {% endif%}   {% для записи в записях%} {{entry.time}}  {% if entry.metrics%} {% для activity_metri c в activity_metrics%} {% для activity_metric_instance в entry.metrics.all%} {% if activity_metric_instance.activity_metri c == activity_metri c%} {{activity_metric_instance.value}}  {% endif%} {% endfor%} {% endfor%} {% endif%}  {% endfor%}   

Это имеет смысл, я перебираю ActivityMetrics , чтобы получить столбцы, а затем перебираю каждую запись ActivityMetricInstances . Если ActivityMetricInstance related ActivityMetri c равно текущему ActivityMetrics внешнему l oop, я печатаю значение. Это гарантирует, что значения выводятся в правильном порядке, но, очевидно, для второй записи, где только 2 ActivityMetrics были заданы столбцы, неправильные.

Затем я добавил несколько logi c чтобы добавить пустой столбец, если ActivityMetri c не совпадает, а внутренний l oop находится на последней итерации:

       {% for activity_metric in activity_metrics %}

          {% for activity_metric_instance in entry.metrics.all %}

            {% if activity_metric_instance.activity_metric == activity_metric %}

              <td scope="col">{{ activity_metric_instance.value }}</td>                

            {% else %}
              {% if forloop.last %}
                <td scope="col">BLANK</td>
              {% endif %}
            {% endif %} 

          {% endfor %}

        {% endfor %}

Однако, должно быть, я что-то не так с моим logi c, поскольку он не работает должным образом:

enter image description here

I hope that all makes sense. I feel like the Model names need to be simplified, and possibly the data restructured if it's causing these issues. Any prompts in the right direction would be very much appreciated. Happy to provide any more info if required.

I've also included the ERD below showing the relationships if that helps:

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...