如何获得某个主题的最新帖子?

时间:2018-07-09 03:11:03

标签: python django

在表格中,我想显示该主题的最新文章。我的帖子模型称为帖子。我在下面列出了我的代码。

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。

3 个答案:

答案 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]