Я создаю приложение для отслеживания 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 происходит следующее:
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, поскольку он не работает должным образом:
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:
введите описание изображения здесь