Проблема с реализацией вывода данных Django
Всем привет, прошу помощи с Django, на первом скрине то, как выводятся данные, есть стек времени, с интервалом в час, у каждой даты, с 8 утра до 7 вечера к примеру. Каждая запись в бд (скрин второй), это дата определенная и время в 8 утра допустим, потом та же дата но 9 утра, Как я могу сделать что бы на сайте он всё выводил как надо, по типу: 17 ноября: 8:00 9:00 18 ноября 8:00 12:00
Кто не понял, то он генерирует в хтмл странице запись, которая выводит запись из бд, поэтому и 4 штуки 17 ноября, и к кажой такой записи он в списке выводит все времена, типо такой херни, следующие скрины - код, из хтмл страницы, вьювс итд.
Очень прошу помочь, сроки поджимают, я не особо силён в джанго
Код модели:
' ' '
class Tattoo(models.Model):
title = models.CharField("Наименование", max_length=50, default='Татуировка', blank=True)
full_datetime = models.DateTimeField('Дата', blank=True)
time = models.TimeField('Время', blank=True)
duration = models.IntegerField('Длительность процедуры', default=15, blank=True)
is_busy_tatt = models.BooleanField(default=False, verbose_name='Отметьте, если занято.', blank=True)
description = models.TextField('Примечание', max_length=255, help_text='Запишите сюда примечания к записи, если это необходимо. ', blank=True)
def __str__(self):
busy = "✅Нет записей на это время. "
if self.is_busy_tatt:
busy = "❌На это время есть запись!"
return f"Время: {self.full_datetime.time().isoformat()} | Дата: {self.full_datetime.date().strftime('%d:%m:%Y')} | Длительность: {self.duration} мин. | {busy} | Процедура: {self.title} "
class Meta:
verbose_name = 'Запись '
verbose_name_plural = 'Записи. Тату. '
' ' '
Код html '''
<table class="table">
<div style="color: #dddddd">Татуировки</div>
<div class="container_table">
<tr>
<th>Дата</th>
<th>Время</th>
</tr>
{% for record_date in records_tatt %}
<tr>
<td>
<details>
<summary>{{ record_date.full_datetime|date }}</summary>
{% for record_time in records_tatt %}
<p>{{ record_time.full_datetime|time }}</p>
{% endfor %}
</details>
</td>
</tr>
{% endfor %}
</div>
</table>
'''
Код вью:
def free_records(request):
days = 16
days_range_all = datetime.datetime.now() + timedelta.Timedelta(days=days)
search_query = request.GET.get('q')
if search_query == None:
days_range_all = datetime.datetime.now() + timedelta.Timedelta(days=days)
records_pier = Piercing.objects.filter(is_busy_pier=False, full_datetime__range=[datetime.datetime.now(), days_range_all]).order_by('-id')
records_tatt = Tattoo.objects.filter(is_busy_tatt=False, full_datetime__range=[datetime.datetime.now(), days_range_all]).order_by('-id')
else:
days_range_querry = datetime.datetime.now() + timedelta.Timedelta(days=days)
records_pier = Piercing.objects.filter(full_datetime__icontains=request.GET.get('q'), full_datetime__range=[datetime.datetime.now(), days_range_querry], is_busy_pier=False).order_by('-id')
records_tatt = Tattoo.objects.filter(full_datetime__icontains=request.GET.get('q'), full_datetime__range=[datetime.datetime.now(), days_range_querry], is_busy_tatt=False).order_by('-id')
return render(request, 'main/free_records.html', {'records_tatt': records_tatt, 'records_pier': records_pier})
А зачем Вы в шаблоне странице выполняете второй цикл?
{% for record_time in records_tatt %}
<p>{{ record_time.full_datetime|time }}</p>
{% endfor %}
Вместо цикла нужно просто вставить строку с временем:
{{ record_date.full_datetime|time }}
В этом случае каждая запись на странице будет состоять из двух строк: даты и времени.