gpt4 book ai didi

django order_by 任一列(日期以最近者为准)

转载 作者:行者123 更新时间:2023-12-02 08:58:58 27 4
gpt4 key购买 nike

我想按最近的 comment.created 或 post.published_date 对我的帖子进行排序(如果还没有评论)。

posts_all =ForumPost.objects.all().filter(published_date__lte=timezone.now()).prefetch_related('comments')

posts=posts_all.annotate(max_activity=Max('comments__created')).order_by('-max_activity','-published_date')

使用上面的代码,它首先显示所有有评论的帖子(按最近的评论事件排序),然后显示所有没有任何评论的帖子(按最近发布的排序)。

我真正想要的是按最新评论或最近发布的帖子排序。任何想法?谢谢。

编辑:让问题更清楚如果有帖子 A 没有评论且是 5 分钟前发布的,而帖子 B 有评论且最近评论是 20 分钟前创建的;帖子 A 应该位于帖子 B 之上。

最佳答案

您可以使用Coalesce function [Django-doc]如果 Max('comments__created') 返回 NULL 则提供一个值(如果没有可聚合的值,则会发生这种情况:

from django.db.models.functions import <b>Coalesce</b>

posts = posts_all.annotate(
max_activity=<b>Coalesce(</b>Max('comments__created')<b>, 'published_date')</b>
).order_by('-max_activity')

关于django order_by 任一列(日期以最近者为准),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59521562/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com