Общая концепция:
Требование для представления, которое будет отображать текущую неделю с событиями (время события в скобках) в каждом столбце дня:
Mon Tue Wed Thu Fri
(10:00) (10:30)
(11:30) (11:30) (12:00)
(13:00)
(13:00)
Время конфликтующих событий должно быть как-то отмечено, и в идеале каждый период времени должен быть в строке и не выровнен по верху, как в текущем рабочем решении.
Текущее работающее решение (скриншот и код), заголовок таблицы имеет месяц и день месяца (день недели), все события в одной строке в столбцах соответствия даты:
![Current week table screenshot](https://i.stack.imgur.com/Ndfg6.png)
views.py:
def get_week(curr_date):
week_start = curr_date - timedelta(days=curr_date.weekday())
week_end = week_start + timedelta(days=7)
delta = week_end - week_start
week = list()
for i in range(delta.days):
week.append(week_start + timedelta(i))
return week
def calendar(request):
week_start = date.today() - timedelta(days=date.today().weekday())
patients = Patient.objects.filter(owner=request.user)
sessions = Session.objects.filter(patient_id__in=patients, sessionDate__gte=week_start).order_by('sessionDate')
return render(request, 'psychotherapist/calendar.html', {'week': get_week(date.today()),
'sessions': sessions})
calendar.html:
<table class="table table-dark table-hover">
<thead>
<tr class="d-flex">
{% for w in week %}
<td class="col">{{ w|date:'M d (D)' }}</td>
{% endfor %}
</tr>
</thead>
<tbody>
<tr class="d-flex">
{% for w in week %}
<td class="col">
{% for s in sessions %}
{% if s.sessionDate|date == w|date %}
<button type="button" class="btn btn-success btn-sm" data-toggle="modal" data-target="#edit_{{ s.pk }}"
name="{{ s.pk }}" title="Edytuj sesję">
{{ s.patient_id.firstName }} {{ s.patient_id.lastName }}<br/>
{{ s.sessionDate|date:'H:i' }}<br/>
</button><br/><br/>
{% endif %}
{% endfor %}
</td>
{% endfor %}
</tr>
</tbody>
</table>
Текущее решение не предлагает ни индикатора конфликта, ни строк времени. Этот простой недельный календарь, возможно, вовсе не лучшее решение, но я не уверен, что мне следует использовать какую-либо из больших библиотек Django Calendar.
Спасибо за предоставленный отзыв.