【问题标题】:How I can show the latest post at the top in Django template using example.example_set.all如何使用 example.example_set.all 在 Django 模板顶部显示最新帖子
【发布时间】:2019-12-21 17:09:28
【问题描述】:

我正在尝试在个人资料中显示所有帖子信息,并且我正在使用下面的此命令在模板中作为模板标签进行操作

{% for letter in user.letter_set.all %}

view.py 中的配置文件视图代码

class UserProfilePage(DetailView):
    template_name = 'profile.html'
    model = Profile

    def get_object(self):
        username = self.kwargs.get("username")
        if username is None:
            raise Http404
        return get_object_or_404(User, username__iexact=username, is_active=True)

它正在工作,但我需要在顶部显示最新帖子。请告诉我我该怎么做。我想我必须对模板标签进行一些更改。 TIA

【问题讨论】:

  • 那么你如何存储你的Letter对象呢?你想通过一个特殊的领域来订购它们,比如posted_on吗?或者你只需​​要反向 id 排序?
  • 几个选项。查看 prefetch_related,您可以添加自定义查询集,以便对数据进行排序。或者您可以为您的 Letter 模型添加默认排序,请参阅 class meta。

标签: django python-3.x django-templates django-views


【解决方案1】:

如果我理解正确,您需要对字母进行排序,从最新到最旧。如果您正在寻找,则在 Letter 模型的 Meta 类中添加 ordering 字段,如下所示:

class Letter(models.Model):
    ...
    some other fields
    ...
    date = models.DateTimeField(...)

    class Meta:
        ordering = ['-date']

'-' 在 date 之前(或在模型中保存日期的其他日期字段)告诉 Django 从最新开始显示 Letter 实例。

其他代码将有效,无需任何更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    相关资源
    最近更新 更多