在表格中,我想显示该主题的最新文章。我的帖子模型称为帖子。我在下面列出了我的代码。
forum.html:
{% for category in categories %}
<h5 class="blue-text">{{ category.title }}</h5>
<table>
<thead>
<tr>
<th>Icon</th>
<th>Name</th>
<th>Latest Post</th>
</tr>
</thead>
{% for topic in category.topic_set.all %}
<tbody>
<tr>
<td><i class="material-icons black-text">{{ topic.icon }}</i></td>
<td><a href="/forum/topic/{{ topic.slug }}">{{ topic.title }} </a><br> <span class="grey-text">{{ topic.description }}</span></td>
<td><a href="#!">post_title</a> <br> <span class="grey-text">post_author</span> <br> <span class="grey-text">post_created_at_timesince</span></td>
</tr>
{% empty %}
<p>No topics in {{ category.title }}</p>
{% endfor %}
</tbody>
</table>
{% empty %}
<p>No categories.</p>
{% endfor %}
views.py:
def forums(request):
categories = Category.objects.all()
topics = Topic.objects.all()
return render(request, 'forum.html', {'categories': categories, 'topics': topics})
如果您需要更多详细信息,请告诉我。
谢谢
Cameron。
答案 0 :(得分:0)
使用Topic.objects.order_by('-createtime')
按创建时间对其进行排序。如果您的字段中没有createtime
,则可以使用-id
来代替,因为最新的主题具有最大的ID。
答案 1 :(得分:0)
这可以通过以下方式完成。您可以像这样更改视图
from django.db.models import Prefetch
def forums(request):
topics = Topic.objects.all().order_by('-created_time')
categories = Category.objects.all().prefetch_related(Prefetch('topic_set', queryset=topics)
return render(request, 'forum.html', {'categories': categories})
以上代码段具有两个优点:
{% for topic in category.topic_set.all %}
后,您会获得最新的帖子。如果您还在其他地方使用,则可以在上下文中添加topics
。对于给定的情况,您不需要在上下文中发送它,因为您是从类别对象获取数据的。
如果您需要在多个地方获取最新的类别帖子,则还可以在ordering
模型的元类中使用topics
属性。
您可以在https://docs.djangoproject.com/en/2.0/ref/models/options/#ordering处找到更多详细信息。
答案 2 :(得分:0)
要获取最新主题,您可以做类似的事情
latest_topic = Topic.objects.order_by('-createtime')[-1]
或
latest_topic = Topic.objects.order_by('-id')[-1]