Я пытаюсь создать таблицу в шаблоне, в которой родитель (привычка) отображается в первом ряду, а семь детей (дни) (внешние ключи) - в следующем.С циклом for я попытался повторить процесс, но мне это не удалось.Желаемый результат должен выглядеть примерно так, но остановитесь после дня 7:
Мне нужен цикл for, потому что я пока не знаю, сколько привычек мне нужно отобразить.
Вот мои модели (сокращенно для наглядности):
class Habit(models.Model):
habit_name = models.CharField(max_length=30)
class HabitTracking(models.Model):
habit = models.ForeignKey(Habit, on_delete=models.CASCADE,
related_name="habit_day")
habit_date = models.DateField()
Мой взгляд:
from .models import Habit, HabitTracking
def habit_list(request):
today = datetime.now().date()
start_of_week = today - timedelta(days=today.weekday())
end_of_week = start_of_week + timedelta(days=6)
habits = Habit.objects.all().order_by('pk')
next_7_days = HabitTracking.objects.order_by('habit__id',
'habit_date').filter(
habit_date__gte=start_of_week
).filter(
habit_date__lte=end_of_week)
first_day = HabitTracking.objects.order_by('habit__id').filter(
habit_date__gte=start_of_week
).filter(
habit_date__lte=start_of_week + timedelta(days=6))
return render(request, 'habit_tracker/habit_list.html',
{
'habits': habits,
'next_7_days': next_7_days,
'today': today.strftime("%d.%m.%y"),
'start_of_week': start_of_week,
'end_of_week': end_of_week, 'first_day': first_day
})
А вот мой шаблон:
<table>
<thead>
<tr>
<th>Habit</th>
<th>S</th>
<th>...</th>
</tr>
</thead>
<tbody>
{% for habit in habits %}
<tr>
<td>{{ habit.habit_name }}</td>
{% for day in first_day %}
<td>{{ day.habit_date|date:"d" }}</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
Спасибо занаправляя меня в правильном направлении.