postgresql 如何从每个用户只获得最近的帖子,按创建日期排序

xdyibdwo  于 2022-12-26  发布在  PostgreSQL
关注(0)|答案(1)|浏览(113)

我尝试在Django中创建一个社交媒体网站,主页将显示每个朋友的最新帖子列表,最新的在顶部。目前我忽略了友谊功能,只显示所有用户的帖子。
我当前的代码从用户那里获取最近的帖子,但是不按照创建日期对列表进行排序。
views.py:

class PostList(generic.ListView):
    model = Post
    # Gets the most recent post from each user
    # However, the returned set is not ordered by created_on
    queryset = Post.objects.order_by('author', '-created_on').distinct('author')
    template_name = 'home.html'

我无法更改order_by调用,因为它会抛出以下错误:SELECT DISTINCT ON expressions must match initial ORDER BY expressions
我知道这是可能的,因为我做了~5年前,但我不知道我当时采取了什么方法,代码丢失。

vjrehmav

vjrehmav1#

如果您可以访问模板中的用户模型,则可以执行以下操作:

{% for friend in friends %}
    {% for post in friend.posts_set.all|dictsort:"created_at" %} // or dictsortreversed 
        {{post.data}}
    {%endfor%}
{%endfor%}

如果您有自定义的用户模型,那么请执行额外的步骤,并在其上定义一些方法来访问帖子:

class User(models.Model):
    ....
    def get_latest_posts(self):
        return self.posts_set.all().order_by("-created_on")

然后在模板中访问它,如下所示:

{% for friend in friends %}
    {% for post in friend.get_latest_posts %}
        {{post.data}}
    {% endfor %}
{% endfor %}

相关问题