У меня есть следующие данные,
Этот запрос группирует по идентификатору темы, а затем в каждой группе получает максимальную дату, частоту сообщений и подсчитывает количество авторов в качестве участников,
info_model = InfoModel.objects.values('topicid')
.annotate( max=Max('date'), freq=Count('postid'),
contributors=Count('author', distinct=True))
Затем этот запрос можно отобразить следующим образом:
Q.1 (РЕШЕНО) Как упорядочить строки по дате, начиная с самой последней? Я добавил .order_by('date') к запросу, что кажется наиболее очевидным решением, но это дает,
полностью изменив «частоту» и «вклад».
РЕДАКТИРОВАТЬ: порядок может быть достигнут путем добавления .order_by('-max')
Q.2 Как я могу отобразить «сообщение» для этой даты? Таким образом, столбец сообщений должен отображаться,
ya
до встречи
Чао
йо Йо
Я думал, что следующее должно работать с {{ item.post }}, но не тут-то было.
<table class='table table-striped table-hover'>
<thead>
<tr>
<th>freq</th>
<th>topicid</th>
<th>date</th>
<th>contributors</th>
<th>post</th>
</tr>
</thead>
<tbody>
{% for item in info %}
<tr>
<td>{{ item.freq }}</td>
<td>{{ item.topicid }}</td>
<td>{{ item.max }}</td>
<td>{{ item.contributors }}</td>
<td>{{ item.post }}</td>
</tr>
{% endfor %}
</tbody>
</table>
Спасибо,
Редактировать:
Я могу получить правильный результат с необработанным SQL, но не могу сделать это с запросом Django,
info_model = list(InfoModel.objects.raw('SELECT *,
max(date),
count(postid) AS freq,
count(DISTINCT author) AS contributors FROM
crudapp_infomodel GROUP BY topicid ORDER BY date DESC'))
Я упростил и разместил эту проблему здесь Перепишите необработанный SQL как запрос Django