挣扎了好几个小时,不知道该做什么。
我有一个数据库表,下面有一些东西:
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是一个日期时间字段。我想在html中显示这个表中的几列,按date_time分组。但首先,我想显示日期的datetimefield按日期分组的日期。
:
<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})
I get as result:
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
到目前为止,一切顺利。但是我只需要datetimefield中的日期,如下所示:
Field 1
6. Juni 2022
7. Juni 2022
8. Juni 2022
等等
对于这类问题有什么提示/技巧或解决方案吗?我也试过在django的查询和模板语言中设置这个,但是没有任何运气。
编辑:
我自己找到了解决办法。不是最漂亮的方式,但它有效:简而言之:只有当有新内容要显示
时,才显示date_time的日期。<table>
<tr>
<th>Field 1</th>
</tr>
{% for terms in term %}
<tr>
<td>{% ifchanged terms.date_time.date %}
{{ terms.date_time.date }} {% endifchanged %}</td>
</tr>
{% endfor %}
</table>
根据您的需要,您可以使用以下两种可能的选择之一。如果您只想从模型实例中获得不同的日期,您可以使用以下
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>