Как получить только дату из поля datetimefield, сгруппированного по дате

Борьба длится уже много часов и не знает, что делать.

У меня есть таблица базы данных с некоторым материалом, как показано ниже:

id  date_time           uuid_id                             status_id   room_label_id   
1   2022-06-06 11:15:00 228451edc3fa499bb30919bf57b4cc32    0           1
2   2022-06-06 12:00:00 50e587d65f8449f88b49129143378922    0           1
3   2022-06-06 12:45:00 d1323b0ebd65425380a79c359a190ec6    0           1
4   2022-06-06 13:30:00 219af9da06ac4f459df2b0dc026fd269    0           1

С большим количеством записей. date_time - это поле datetimefield. Я хочу отобразить несколько колонок из этой таблицы в html, сгруппированных по date_time. Но сначала я хочу вывести дату из поля datetimefield, сгруппированную по дате.

With:

<table>
    <tr>
        <th>Field 1</th>
    </tr>

{% for terms in term %}
    <tr>
        <td>{{ terms.date_time.date }}</td>
    </tr>
{% endfor %}
</table>

и мое мнение:

def schedule(request):
        term = appointment.objects.all()
        return render(request, 'scheduler/schedule.html', {'term' : term})

Я получаю в результате:

Field 1
6. Juni 2022
6. Juni 2022
6. Juni 2022
6. Juni 2022
6. Juni 2022
6. Juni 2022
6. Juni 2022
7. Juni 2022
7. Juni 2022
7. Juni 2022
7. Juni 2022
7. Juni 2022
7. Juni 2022
7. Juni 2022
8. Juni 2022
8. Juni 2022
8. Juni 2022
8. Juni 2022

Пока все хорошо. Но мне нужна только дата из поля datetime следующим образом:

Field 1
6. Juni 2022
7. Juni 2022
8. Juni 2022

и так далее.

Есть советы/подсказки или решения для такой проблемы?

Я также пытался настроить это в querys и языке шаблонов django, но безуспешно

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

from django.db.models.functions.datetime import TruncDay

days = (appointment
        .objects
        .annotate(day=TruncDay('date_time')
        .order_by('day')
        .values_list('day')
        .distinct())

Это даст вам список только отдельных дней.


В качестве альтернативы, если вы хотите сгруппировать данные по этому дню в шаблоне, вы можете использовать следующее

на ваш взгляд

from django.db.models.functions.datetime import TruncDay

data_with_days = (appointment
                 .objects
                 .annotate(day=TruncDay('date_time'))

и в вашем шаблоне

{% regroup data_with_days by day as grouped %}

<table>
  <thead>
    <tr>
      <th>Day</th>
      <th>Data</th>
    </tr>
  </thead>
  <tbody>
    {% for g in grouped %}
    <tr>
      <td>{{ g.grouper }}</td>
      <td>
        {% for item in g.list %}
          {{ item }} <!-- Display what you want from your appointment -->
          {% if not forloop.last %}<br/>{% endif %}
        {% endfor %}
      </td>
    </tr>
    {% endfor %}
  </tbody>
</table>
Вернуться на верх