Django Custom Calendar на основе двух моделей - PullRequest
0 голосов
/ 04 января 2019

Общая концепция:

Требование для представления, которое будет отображать текущую неделю с событиями (время события в скобках) в каждом столбце дня:

Mon            Tue            Wed            Thu            Fri    
(10:00)        (10:30)                       
               (11:30)                       (11:30)        (12:00)
                              (13:00)
                              (13:00)

Время конфликтующих событий должно быть как-то отмечено, и в идеале каждый период времени должен быть в строке и не выровнен по верху, как в текущем рабочем решении.

Текущее работающее решение (скриншот и код), заголовок таблицы имеет месяц и день месяца (день недели), все события в одной строке в столбцах соответствия даты:

Current week table screenshot

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 }}&nbsp;{{ s.patient_id.lastName }}<br/>
                            {{ s.sessionDate|date:'H:i' }}<br/>
                        </button><br/><br/>
                {% endif %}
            {% endfor %}
        </td>
        {% endfor %}
    </tr>
    </tbody>
</table>

Текущее решение не предлагает ни индикатора конфликта, ни строк времени. Этот простой недельный календарь, возможно, вовсе не лучшее решение, но я не уверен, что мне следует использовать какую-либо из больших библиотек Django Calendar.

Спасибо за предоставленный отзыв.

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